JSONParse
テキストを JSON データとして解析し、解析した JSON 表現をメモリに保存して他の JSON 関数で再利用できるようにします。
構文
JSONParse (json)
引数
json
- JSON オブジェクトまたは配列を含むテキスト式またはフィールド
戻り値のデータタイプ
テキスト
起点バージョン
22.0
説明
JSONParse は最初に入力された json
のテキスト式を評価してから、JSON テキストを解析してバイナリ表現をメモリにキャッシュします。JSONParse が変数およびスクリプトの引数を設定する場合、または他の計算に使用される場合、このバイナリ表現を他の JSON 関数で使用して解析されたデータを処理することができます。
JSONParse は json
が有効であれば元のテキストをそのまま返し、無効な場合はエラーメッセージを返します。無効な JSON の場合、JSONParse は「?」で始まるエラーメッセージを返します。その後は他の JSON 関数と同様に、解析エラーの詳細が続きます。
JSON のパフォーマンスの最適化を参照してください。
メモ
-
1 回の JSON の処理の場合、テキストに直接他の JSON 関数を使用しても先に JSONParse を使用するのと同様の結果を得る場合があります。
-
JSONParsedState 関数を使用して JSON データが正常に解析されて有効であるかどうかを確認できます。
例 1 - 単純な JSON オブジェクトの基本的な解析
JSONParse ("{\"名前\": \"Alea\", \"年齢\": 30, \"都市\": \"ニューヨーク\"}")
は JSON データの変更されていないテキスト表現である {"名前": "Alea", "年齢": 30, "都市": "ニューヨーク" } を返します。
変数 $$Contact に設定すると、バイナリ表現がメモリにキャッシュされて $$Contact を使用する計算に使用できます。
Let ([
$$Contact = JSONParse ("{\"名前\": \"Alea\", \"年齢\": 30, \"都市\": \"ニューヨーク\"}")
] ;
$$Contact
)
JSON が無効な場合、JSONParse はデータを解析しますが、エラーメッセージを返します。たとえば、上記の JSON で最初のコンマが欠落している場合、JSONParse は次のように返します:
? * Line 1, Column 18
Missing ',' or '}' in object declaration
例 2 - 複数の JSON オブジェクトの解析
JSONParse を使用して $JSONText1 および $JSONText2 の JSON テキストを解析してから、変数 $ParsedJSON1 および $ParsedJSON2 から要素を取得します。JSON データを再度解析する必要はありません。
変数を設定 [$ParsedJSON1 ; 値: JSONParse ($JSONText1)]
変数を設定 [$ParsedJSON2 ; 値: JSONParse ($JSONText2)]
変数を設定 [$name ; 値: JSONGetElement ($ParsedJSON1 ; "名前")]
変数を設定 [$id ; 値: JSONGetElement ($ParsedJSON2 ; "id")]
変数を設定 [$category ; 値: JSONGetElement ($ParsedJSON1 ; "カテゴリ")]
例 3 - エラーチェックおよびループでの解析された JSON の使用
エラーチェックの方法を紹介し、ループ内の同じ JSON データの複数の要素を処理するときに JSONParse を使用してパフォーマンスを向上させる方法を示します。$$JSON には JSON データの例の JSON テキストが含まれています。スクリプトで $$JSON を解析した後、解析された JSON が有効かどうか (JSONParsedState 関数が正の値を返す場合) を確認します。解析された JSON が有効な場合、スクリプトは「ベーカリー.製品
」配列をループし、すでに解析された JSON データから値を取得します。
変数を設定 [$ParsedJSON ; 値: JSONParse ($$JSON)]
If [JSONParsedState ($ParsedJSON) > 0]
# JSON は有効です。複数の処理に解析された JSON を使用します。
変数を設定 [$ProductCount ; 値: ValueCount (JSONListKeys ($ParsedJSON ; "ベーカリー.製品"))]
変数を設定 [$i ; 値: 0]
Loop [フラッシュ: 常に]
変数を設定 [$Product ; 値: JSONGetElement ($ParsedJSON ; "ベーカリー.製品[" & $i & "]")]
変数を設定 [$ProductName ; 値: JSONGetElement ($Product ; "名前" ) ]
変数を設定 [$ProductPrice ; 値: JSONGetElement ($Product ; "価格")]
# 製品データを処理します...
変数を設定 [$i ; 値: $i + 1]
Exit Loop If [$i ≥ $ProductCount]
End Loop
Else
# JSON の解析エラーを処理します
カスタムダイアログを表示 ["JSON エラー" ; $ParsedJSON]
End If