Funkce ParseJSON
Platí pro: aplikace plátna
modelem řízené aplikace
Power Pages
Power Platform CLI
Interpretuje řetězec JSON a vrátí netypový nebo typový objekt.
Důležité
- Použití druhého argumentu pro ParseJSON k převodu na typový objekt je experimentální vlastnost.
- Experimentální funkce nejsou určené pro normální používání a mohou mít omezené fungování. Jsou to funkce, které jsou poskytnuté před oficiálním vydáním, abyste si je mohli co nejdříve vyzkoušet a napsat nám své názory. Další informace: Popis experimentálních a vyřazených funkcí nebo funkcí Preview v aplikacích plátna
- Chování, které tento článek popisuje, je k dispozici pouze v případě, že je zapnuta experimentální vlastnost Uživatelem definované typy v části Nastavení > Připravované funkce > Experimentální (ve výchozím nastavení je vypnutá).
- Vaše zpětná vazba je pro nás velmi cenná. Dejte nám prosím vědět, co si myslíte, v komunitním fóru experimentálních funkcí Power Apps.
Description
Funkce ParseJSON analyzuje platný řetězec JSON a vrátí netypový objekt 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 vracet chyby, pokud text není platný kód JSON podle formátu JavaScript Object Notation (JSON) popsaného v normách 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 vrátí ParseJSON netypový objekt; s tímto argumentem funkce vrátí silně typový objekt.
Převod datového typu netypovaného objektu
Bez druhého argumentu vrátí ParseJSON netypový objekt, 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. | Boolean( 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.g ), 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. Netypovaný objekt 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("{ ""appointment"": ""2022-05-10"" }").appointment ) DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) ) |
Identifikátor 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"" }").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 z objektu JSON do struktury záznamu, ale jednotlivá pole lze načíst z netypovaného objektu 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. Pole ParseJSON() lze převést pouze na tabulku s jedním sloupcem netypovaného objektu a mohou být použita jako taková nebo převedena na typované 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"": ""toto je 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 }
- Následující vzorec vrátí text
text value
:Text( ParseJSON( JsonString ).parent.child )
- 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" } }
- 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 }
- 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 ) )
- 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] }
- Přístup k druhému číslu v jednosloupcové tabulce pole netypovaného objektu a převod na číslo pomocí Value() vrací
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Převod jednosloupcové tabulky netypovaného objektu v pole do jednosloupcové tabulky čí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"}
] }
Převod na typovanou tabulku záznamů přímo pomocí ForAll() lze provést pomocí
ThisRecord.[fieldname]
pro přístup k polím netypovaného objektu a jejich převedení na známé typy:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Pole na tabulku
- Převod netypovaného objektu na tabulku pomocí funkce Table() má za výsledek tabulku s jedním sloupcem netypových objektů. 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í jednosloupcovou tabulku netypovaných objektů s jednosloupcovou hodnotou pro číslo v poli…
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 netypových objektů, která představuje každý objekt json v poli.
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )