次の方法で共有


ParseJSON 関数

適用対象: キャンバス アプリ モデル駆動型アプリ Power Pages Power Platform CLI

JSON 文字列を解釈し、型指定されていないオブジェクト を返します。

Description

ParseJSON 関数は有効な JSON 文字列を解析し、型指定されていないオブジェクト はJSON構造を表します。

ECMA-404IETF RFC 8259 で説明されている JavaScript Object Notation (JSON) 形式に従ってテキストが有効な JSON でない場合、ParseJSON 関数はエラーを返すことがあります。

構文

ParseJSON( JSONString )

  • JSONString – 必須。 テキストとして表される JSON 構造。

型指定されていないオブジェクトのデータ型を変換する

ParseJSON はサポートされているデータ型のフィールド値を明示的に変換する必要がある 型指定されていないオブジェクト を返します。 次の表は、Power Apps の データ型 と対応する JSON データ型とその変換方法を一覧表示しています。

データ型 JSON の例 説明設定 会話の例
ブール型 { "bool": true } ブール値は JSON の明示的な型であり、直接変換できます。 ブール値(JSONを解析します ("{ ""bool"": true }").bool)
カラー { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
JSON には色のタイプはありません。 色の値は、RGBA 整数または 16 進文字列から作成できます。 カラー値( ParseJSON( "{ ""color"": ""#102030"" }" ).color )
( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }、RGBA( 値( uo.r )、値( uo.g )、値( uo.b )、値( uo.a ) ) )
数字、通貨 { "numbervalue": 123.5 } 数値は、JSON ではピリオド ( . ) を小数点として直接表現されます。 値( 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("{ ""予約"": ""2022-05-10"" }").予約 )
DateValue( Text( ParseJSON("{ ""予定"": ""2022年5月5日"" }").予定 ) )
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 で使用できます。 テキスト( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI )
選択肢 { "status": 1 }
{ "status": "Closed" }
選択肢は、数字で裏付けられたローカライズされた文字列として表示されます。 JSON() 関数 はそのバッキング番号にシリアライズします。 数値または文字列から選択肢への直接変換はありませんが、Switch() または If() 関数は、テキストまたは数値に対して使用できます。 スイッチ(値(ParseJSON( "{ ""status"": 1 }" ).status), 0, Status.Open, 1, Status.Closed)
Record { "field": "value" } JSON オブジェクトからレコード構造への直接変換はありませんが、個々のフィールドは 型指定されていないオブジェクト からレコードを形成します。 { フィールド: テキスト( ParseJSON( "{ ""フィールド"": ""値"" }" ).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 の明示的な型であり、直接変換できます。 テキスト( ParseJSON( "{ ""stringField"": ""これはテキストです"" }").stringField )
2 つのオプション { "available": true }
{ "available": "Yes" }
2 つのオプションは、ブール値で裏付けられたローカライズされた文字列として表示されます。 JSON() 関数 は、2 つのオプションをブール値にシリアル化します。 ブール値、数字、または文字列からふたつのオプションへの直接変換はありませんが、Switch() または If() 関数は、テキスト、数字またはブール値に対して使用できます。 スイッチ( ブール値( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

使用例

フィールド値にアクセスする

JsonString という名前の変数に次の JSON 文字列があるとします

{ "parent": { "child": "text value" }, "number": 567 }
  1. 次の式は、テキスト text value を返します。
    Text( ParseJSON( JsonString ).parent.child )
    
  2. 次の式は、数字 567 を返します。
    Value( ParseJSON( JsonString ).number )
    

フィールド名が無効な識別子名で構成されている場合は、フィールド名を一重引用符で囲むことができます。 JsonString という名前の変数に次の JSON 文字列があるとします

{ "0": { "child-field": "text value" } }
  1. 次の式は、テキスト text value を返します。
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

空白

JsonString という名前の変数に次の JSON 文字列があるとします

{ "text": "text value" , "number": 567, "empty": null }
  1. 存在しないフィールドにアクセスしようとすると、Blank() と返します。 次の数式は true と返されます。
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. JSON null 値が Blank() を考慮します。 次の数式は true と返されます。
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

シンプルな配列

JsonString という名前の変数に次の JSON 文字列があるとします

{ "array": [1, 2, 3] }
  1. Accessing the second number in the array field's single-column table of 型指定されていないオブジェクト の配列アレイ フィールドの単一列テーブの二番目の数値にアクセスすることと、Value() を使って 2 を返す数字への変換:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. 配列フィールドで 型指定されていないオブジェクト の単一列テーブルを、数値 { Value: 1 }, { Value: 2 }, { Value: 3 } の単一列テーブルに返還する:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

レコードの配列

JsonString という名前の変数に次の JSON 文字列があるとします

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. ForAll() を使用してレコードの型付きテーブルに、ThisRecord.[fieldname] を使用して直接変換し、型指定されていないオブジェクト フィールドにアクセスして既知の型に変換できます。

    ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
    

テーブルに配列

  1. 型指定されていないオブジェクト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 )