Sdílet prostřednictvím


ParseJSON Funkce

Platí pro: Aplikace plátna Copilot Studio Modelem řízené aplikace Power Platform CLI – funkce Power Pages

Interpretuje řetězec JSON a vrátí dynamickou hodnotu nebo konkrétní typovou hodnotu, pokud je zadaný typ.

Důležité

Description

Funkce ParseJSON parsuje platný řetězec JSON a vrátí dynamickou hodnotu představující strukturu JSON.

Volitelně můžete pomocí druhého argumentu převést JSON na typový objekt, který lze přímo použít ve vzorcích Power Fx. To usnadňuje konzumaci výsledku, protože konverze a nátlak v místě použití již nejsou nutné. Netypovaný JSON je namapován na typ s těmito pravidly:

  • Sloupce v typu, které nejsou přítomny v kódu JSON, jsou vyplněny jako prázdné.
  • Sloupce ve formátu JSON, které nejsou přítomny v typu, jsou ignorovány.
  • V případě sloupců, které jsou v typu i kódu JSON, musí být hodnota JSON vynutitelná na daný typ.

Funkce ParseJSON může vrátit chyby, pokud text není platný JSON podle formátu JSON (JavaScript Object Notation) popsaného v ECMA-404 a IETF RFC 8259.

Syntaxe

ParseJSON( JSONString [ , Type ] )

  • JSONString – povinné. Struktura JSON reprezentovaná jako text.
  • Type – Volitelné. Definice typu Power Fx pro strukturu JSON. Bez tohoto argumentu ParseJSON vrátí dynamickou hodnotu. Funkce vrátí konkrétní zadaná hodnota.

Převod dynamických hodnot

Bez druhého argumentu vrátí dynamickou hodnotu, ParseJSON která vyžaduje explicitní převod hodnot polí v podporovaných datových typech. Následující tabulka uvádí datové typy v Power Apps a odpovídající datový typ JSON, a jak ho převést.

Datový typ Příklady JSON Description Příklad převodu
logický { "bool": true } Boolean je explicitní typ v JSON a lze ho přímo převést. Logická hodnota( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
V JSON není žádný typ barvy. Hodnoty barev lze vytvořit z celých čísel RGBA nebo hexadecimálních řetězců. ColorValue( ParseJSON( "{ ""color"": ""#102030"" }" ).color )
With( { uo: ParseJSON( "{ ""r"":255; ""g": 128; "b": 0, "a""": 0,5 }" ) }; RGBA( Value( uo.r ); Value( uo.r ); Value( uo.b ); Value( uo.a ) ) )
Měna, číslo { "numbervalue": 123.5 } Čísla jsou reprezentována přímo v JSON s tečkou (.) jako oddělovačem desetinných míst. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Datum, datum a čas, čas { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON nemá typ data nebo času, takže může reprezentovat data a časy pouze jako řetězce. Dynamickou hodnotu lze přímo převést z řetězce ve formátu ISO 8601 na datum, čas nebo datum a čas. U jiných formátů nejprve převeďte pole JSON na text pomocí funkce Text() a poté použijte funkci DateValue(), TimeValue() nebo DateTimeValue(), která ve výchozím nastavení použije jazyk nastavení aktuálního uživatele. DateValue( ParseJSON("{ ""událost""": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""událost"":"5. května 2022"" }").appointment ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON nemá datový typ pro GUId, takže je lze reprezentovat pouze jako řetězce. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Hypertextový odkaz, obrázek, médium { "URI": "https://northwindtraders.com/logo.jpg" } Tyto datové typy jsou textové datové typy a lze je převést na text a poté použít v Power Apps. Text( ParseJSON("{ ""URI"": "";https://northwindtraders.com/logo.jpg"" }"). Identifikátor URI )
Výběr { "status": 1 }
{ "status": "Closed" }
Volby jsou prezentovány jako lokalizované řetězce podložené číslem. Funkce JSON() serializuje volbu na její podpůrné číslo. Neexistuje žádný přímý převod z čísla nebo řetězce na volbu, ale funkce Switch() nebo If() lze použít na textovou nebo číselnou hodnotu. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ); 0; Status.Open; 1; Status.Closed )
Zaznamenat { "field": "value" } Neexistuje žádný přímý převod objektu JSON na strukturu záznamů, ale jednotlivá pole lze načíst z dynamické hodnoty a vytvořit záznam. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Reference záznamu nelze použít Reference záznamů jsou jedinečné pro zdroje dat a nelze je serializovat ani zrušit serializaci. Hodnoty polí, které představují jedinečné klíče, lze v JSON použít k identifikaci záznamů, které lze následně vyhledat. nelze použít
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON může obsahovat pole, která lze převést na tabulky. Tyto hodnoty mohou být pole záznamů nebo pole hodnot, které jsou ve skutečnosti tabulkami s jedním sloupcem. ParseJSON() Matice lze převést pouze na tabulku s jedním sloupcem dynamických hodnot a lze je použít jako takové nebo převést na typové tabulky záznamů pomocí 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" } Text je explicitní typ v JSON a lze ho přímo převést. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
Dvě možnosti { "available": true }
{ "available": "Yes" }
Dvě možnosti jsou prezentovány jako lokalizované řetězce podložené logickou hodnotou. Funkce JSON() serializuje dvě možnosti na jejich logickou hodnotu. Neexistuje žádný přímý převod z logické hodnoty, čísla nebo řetězce na dvě možnosti, ale funkce Switch() nebo If() lze použít na textovou, číselnou nebo logickou hodnotu. Switch( Boolean( ParseJSON( " { ""available"": true }" ).available ), false, Availability.No; true; Availability.Yes )

Příklady

Přístup k hodnotám polí

Když máme následující řetězec JSON v proměnné s názvem JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Následující vzorec vrátí text text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Následující vzorec vrátí číslo 567:
    Value( ParseJSON( JsonString ).number )
    

V případě, že název pole obsahuje neplatný název identifikátoru, můžete názvy polí uvést do jednoduchých uvozovek. Když máme následující řetězec JSON v proměnné s názvem JsonString

{ "0": { "child-field": "text value" } }
  1. Následující vzorec vrátí text text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Prázdné hodnoty

Když máme následující řetězec JSON v proměnné s názvem JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Pokus o přístup k neexistujícím polím vrátí Blank(). Následující vzorec vrátí true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Hodnoty JSON null se považují za Blank(). Následující vzorec vrátí true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Jednoduchá pole

Když máme následující řetězec JSON v proměnné s názvem JsonString

{ "array": [1, 2, 3] }
  1. Přístup k druhému číslu v tabulce s jedním sloupcem pole dynamických hodnot a převod na číslo pomocí funkce Value() vrátí 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Převod tabulky s jedním sloupcem dynamických hodnot v poli pole na tabulku s jedním sloupcem čísel { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Pole záznamů

Když máme následující řetězec JSON v proměnné s názvem JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Převod na typovou tabulku záznamů přímo pomocí příkazu ForAll() lze provést pomocí ThisRecord.[fieldname] přístupu k dynamickým polím a jejich převodem na konkrétní typy:

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

Pole na tabulku

  1. Převodem dynamických hodnot na tabulku pomocí funkce Table() vznikne tabulka s jedním sloupcem dynamických hodnot. K objektu je pak třeba přistupovat pomocí (jednoho) sloupce Value a převést na typy, jak bylo vysvětleno výše.

Když máme následující řetězec JSON v proměnné s názvem JsonString

{ "array": [1, 2, 3] }

Table() vrátí tabulku s jedním sloupcem dynamických hodnot s hodnotou s jedním sloupcem pro číslo v matici...

 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() vrátí tabulku s jedním sloupcem dynamických hodnot, která představuje každý objekt JSON v poli.

  Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
  
  Text( Index(untypedTable, 1).Value.name )