ParseJSON 関数
適用対象: Canvas アプリ
モデル駆動型アプリ
Power Pages
Power Platform CLI
JSON 文字列を解釈し、型指定されていないオブジェクト または型指定されてたオブジェクトを返します。
重要
- 型付きオブジェクトに変換するために ParseJSON の第 2 引数を使用する機能は、実験段階の機能です。
- 実験段階の機能は運用環境での使用を想定しておらず、機能が制限されている場合があります。 これらの機能は公式リリースの前に使用できるため、一足先にアクセスして フィードバックを送る ことができます。 詳細: キャンバス アプリで実験的、プレビューおよび廃止された機能を理解する
- この記事で説明されている動作は、設定 > 今後リリースの機能 > 実験的 のユーザー定義の型の実験的機能がオンになっている場合にのみ利用可能です (既定ではオフになっています)。
- 皆様のフィードバックはとても貴重です。 ご意見を Power Apps 実験的機能のコミュニティ フォーラム にお寄せください。
プロパティ
ParseJSON 関数は有効な JSON 文字列を解析し、JSON 構造を表す型指定されていないオブジェクトを返します。
必要に応じて、2 番目の引数を使用して、JSON を Power Fx 数式で直接使用できる型指定されたオブジェクトに変換します。 これにより、使用時点での変換や強制が不要になるため、結果を簡単に使用できます。 型指定されていない JSON は、次の規則に従って型にマッピングされます。
- JSON に存在しない型の列は、空白 で埋められます。
- 型に存在しない JSON の列は無視されます。
- 型と JSON の両方にある列の場合、JSON 値は型に強制可能である必要があります。
ECMA-404 と IETF RFC 8259 で説明されている JavaScript Object Notation (JSON) 形式に従ってテキストが有効な JSON でない場合、ParseJSON 関数はエラーを返すことがあります。
構文
ParseJSON( JSONString [ , Type ] )
- JSONString – 必須。 テキストとして表される JSON 構造。
- Type - 任意。 JSON 構造の Power Fx 型の定義。 この引数がない場合、ParseJSON は型指定されていないオブジェクトを返し、引数がある場合は、関数は厳密に型指定されたオブジェクトを返します。
型指定されていないオブジェクトのデータ型を変換する
2 つ目の引数がない場合、ParseJSON はサポートされているデータ型のフィールド値を明示的に変換する必要がある型指定されていないオブジェクトを返します。 次の表は、Power Apps の データ型 と対応する JSON データ型とその変換方法を一覧表示しています。
データ型 | JSON の例 | 説明設定 | 会話の例 |
---|---|---|---|
ブール型 | { "bool": true } |
ブール値は JSON の明示的な型であり、直接変換できます。 | Boolean( ParseJSON("{ ""bool"": true }").bool ) |
カラー | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
JSON には色のタイプはありません。 色の値は、RGBA 整数または 16 進文字列から作成できます。 |
ColorValue( ParseJSON( "{ ""color"": ""#102030"" }" ).color ) With( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Value( uo.r ), Value( uo.g ), Value( uo.b ), Value( uo.a ) ) ) |
数字、通貨 | { "numbervalue": 123.5 } |
数値は、JSON ではピリオド ( . ) を小数点として直接表現されます。 | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
日付、日時、時間 | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON には日付または時刻の型がないため、日付と時刻を文字列としてのみ表すことができます。 型指定されていないオブジェクトは、ISO 8601 形式の文字列から日付、時刻、または日時に直接変換できます。 他の形式の場合は、最初に JSON フィールドをテキストに変換します。Text() 関数を使用してから、現在のユーザー設定の言語を使用するデフォルトの DateValue(), TimeValue() or DateTimeValue() 関数を使用します。 |
DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment ) DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON には GUId のデータ型がないため、文字列としてのみ表すことができます。 | GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
HyperLink、イメージ、メディア | { "URI": "https://northwindtraders.com/logo.jpg" } |
これらのデータ型はテキスト データ型であり、テキストに変換してから Power Apps で使用できます。 | Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI ) |
選択肢 | { "status": 1 } { "status": "Closed" } |
選択肢は、数字で裏付けられたローカライズされた文字列として表示されます。 JSON() 関数 はそのバッキング番号にシリアライズします。 数値または文字列から選択肢への直接変換はありませんが、Switch() または If() 関数は、テキストまたは数値に対して使用できます。 | Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed ) |
Record | { "field": "value" } |
JSON オブジェクトからレコード構造への直接変換はありませんが、個々のフィールドは 型指定されていないオブジェクト からレコードを形成します。 | { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) } |
レコード参照 | なし | レコード参照はデータソースに固有であり、シリアル化または非シリアル化することはできません。 一意のキーを表すフィールド値を JSON で使用して、検索できるレコードを識別できます。 | なし |
テーブル | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON には、テーブルに変換できる配列を含めることができます。 これらの値は、レコードの配列、または実質的に単一列テーブルである値の配列にすることができます。 ParseJSON() 配列は、型指定されていないオブジェクト 単一の列テーブルにのみ変換でき、ForAll() として使用することも、型付きレコードのテーブルに変換することもできます。 | ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } ) |
Text | { "stringField": "this is text" } |
テキストは JSON の明示的な型であり、直接変換できます。 | Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField ) |
2 つのオプション | { "available": true } { "available": "Yes" } |
2 つのオプションは、ブール値で裏付けられたローカライズされた文字列として表示されます。 JSON() 関数 は、2 つのオプションをブール値にシリアル化します。 ブール値、数字、または文字列からふたつのオプションへの直接変換はありませんが、Switch() または If() 関数は、テキスト、数字またはブール値に対して使用できます。 | Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes ) |
使用例
フィールド値にアクセスする
JsonString
という名前の変数に次の JSON 文字列があるとします
{ "parent": { "child": "text value" }, "number": 567 }
- 次の式は、テキスト
text value
を返します。Text( ParseJSON( JsonString ).parent.child )
- 次の式は、数字
567
を返します。Value( ParseJSON( JsonString ).number )
フィールド名が無効な識別子名で構成されている場合は、フィールド名を一重引用符で囲むことができます。
JsonString
という名前の変数に次の JSON 文字列があるとします
{ "0": { "child-field": "text value" } }
- 次の式は、テキスト
text value
を返します。Text( ParseJSON( JsonString ).'0'.'child-field' )
空白
JsonString
という名前の変数に次の JSON 文字列があるとします
{ "text": "text value" , "number": 567, "empty": null }
- 存在しないフィールドにアクセスしようとすると、Blank() と返します。 次の数式は
true
と返されます。IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- JSON
null
値が Blank() を考慮します。 次の数式はtrue
と返されます。IsBlank( Text( ParseJSON( JsonString ).empty ) )
シンプルな配列
JsonString
という名前の変数に次の JSON 文字列があるとします
{ "array": [1, 2, 3] }
- Accessing the second number in the array field's single-column table of 型指定されていないオブジェクト の配列アレイ フィールドの単一列テーブの二番目の数値にアクセスすることと、Value() を使って
2
を返す数字への変換:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- 配列フィールドで 型指定されていないオブジェクト の単一列テーブルを、数値
{ Value: 1 }, { Value: 2 }, { Value: 3 }
の単一列テーブルに返還する:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
レコードの配列
JsonString
という名前の変数に次の JSON 文字列があるとします
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
ForAll() を使用してレコードの型付きテーブルに、
ThisRecord.[fieldname]
を使用して直接変換し、型指定されていないオブジェクト フィールドにアクセスして既知の型に変換できます。ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
テーブルに配列
-
型指定されていないオブジェクト を Table() 関数を使用してテーブルに変換すると、型指定されていないオブジェクト の単一列テーブルになります。 オブジェクトは、
Value
(単一) 列を使用してアクセスし、前述のように型に変換される必要があります。
JsonString
という名前の変数に次の JSON 文字列があるとします
{ "array": [1, 2, 3] }
Table() は、配列内の数値の単一列の値で 型指定されていないオブジェクト の単一列テーブルを返します。
Set(untypedTable, Table( ParseJSON( JsonString ).array ));
Value( Index(untypedTable, 1).Value.Value )
```
Given the following JSON string in a variable named `JsonString`
```JSON
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
Table() は、配列内の各 json オブジェクトを表す 型指定されていないオブジェクト の単一列テーブルを返します。
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )