LabVIEW でJSON
LabVIEW2014からJSON文字列への変換がサポートされました。
(他の言語を使っている方からは「なにを今さら」といわれそうですが。)
とはいっても、任意のデータをJSON文字列に変換と、その逆変換の関数が用意されただけなんですが、Webサービスとの絡みもあって、今後はLabVIEW界隈でも使う機会が増えるかもしれません。
JSON文字列への変換・逆変換
LabVIEWのJSON変換は、
項目と値をひとつずつJSONオブジェクトにセットしていく、というやりかたではなく、パラメータで渡されたクラスタなどのデータを、そのままJSON形式文字列に変換するものです。
逆変換する場合は、データ型を指定してJSON文字列から指定されたデータ型に変換します。なので、文字列からパースする場合は、あらかじめデータ型がわかってないと使えません。
項目の名前だけでなく、順番や個数も合致している必要があります。
また、配列はLabVIEW独自拡張したフォーマットになるようです。
JSON文字列に変換(Flatten To JSON String)
JSON文字列から変換(Unflatten From JSON)
欠点
1.文字コードがUTF-8
JSON文字列の文字コードはUTF-8なので、日本語が混ざっている場合は注意。
2.クラスタメンバーの並び
LabVIEWのUnFlatten JSON関数は、JSON文字列から逆変換する時に、クラスタ(構造体)の項目の順序とJSON文字列の項目の並びが一致させないと、エラーになります。
他の言語で、JSONデータをdumpして文字列出力する時の並びは、ランダムかもしくはソートされて出力されてきますので、これをLabVIEW側で受け取って変換しようとするとエラーになります。
面倒でも、LabVIEW側のクラスタ(構造体)の項目の順序に合うように並べてあげる必要があります。
もしくは、LabVIEW側のクラスタ(構造体)の各項目の順序をラベルテキストの昇順になるようにする?
用途
おもな用途として、WebサービスAPIのPOSTパラメータや応答の出力にJSON形式を使うことが多いようです。
LabVIEWでもWebServiceAPIの応答の出力形式にJSON形式を指定できます。
それ以外に、ログ出力メッセージや設定ファイルやなどにも使えると思います。
ログメッセージ出力
LabVIEWのJSON変換は、1行出力なので、これを逆に利用してエラークラスタなど複雑な構造(クラスタ)のデータを、逐一書式指定すること無しに1行の文字列に変換してログに出力できます。
以下の例はエラークラスタの文字列変換例です。
設定ファイル
たいてい、INI形式を使っていると思いますが、
LabVIEW2014 のcRIO(RealTimeLinux)ではINI形式保存・読み込みに不具合があって使えなかったりするので、その代用にできます。
LabVIEW XML形式でもいいのですが、JSONの方が簡潔なので見やすいです。項目が少ない場合は、JSONで十分ことたりると思います。
難点は、JSON文字列に変換した文字列が折り返しの1行出力なので、項目が多いと、だらだらと長い1行になって可読性にかけることです。出力した文字列のフォーマット(4タブでインデントなど)が指定できるといいんですが。
*)文字列がUTF8なのでエディタで編集する場合は要注意です。