Funcția ParseJSON
Se aplică pentru: planșă de lucru apps Aplicații bazate pe model Power Pages Power Platform CLI
Interpretează un șir JSON și returnează un obiect netipizat.
Descriere
Funcția ParseJSON va analiza un șir JSON valid și va returna un obiect netipizat reprezentând structura JSON.
Funcția ParseJSON poate returna erori dacă textul nu este JSON valid conform formatului JavaScript Object Notation (JSON) descris în ECMA-404 și IETF RFC 8259.
Sintaxă
ParseJSON( JSONString )
- JSONString – Obligatoriu. Structura JSON reprezentată ca text.
Conversia tipului de date obiect netipizat
ParseJSON returnează un obiect netipizat care necesită conversia explicită a valorilor câmpurilor în tipurile de date acceptate. Următorul tabel listează tipurile de date în Power Apps și un tip de date JSON corespunzător și modul de conversie a acestuia.
Tip de date | Exemple JSON | Descriere | Exemplu de conversie |
---|---|---|---|
Boolean | { "bool": true } |
Booleanul este un tip explicit în JSON și poate fi convertit direct. | Boolean( ParseJSON ("{ ""bool"": true }").bool ) |
Culoare | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
Nu există niciun tip de culoare în JSON. Valorile de culoare pot fi create din numere întregi RGBA sau șiruri hexazecimale. | ColorValue( ParseJSON( "{ ""culoare"": ""#102030"" }" ).color ) Cu( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"" : 0,5 }" ) }, RGBA( Valoare( uo.r ), Valoare ( uo.g ), Valoare ( uo.b ), Valoare ( uo.a ) ) ) |
Monedă, număr | { "numbervalue": 123.5 } |
Numerele sunt reprezentate direct în JSON cu un punct ( . ) ca separator zecimal. | Valoare( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Dată, DateTime, Oră | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON nu are un tip de dată sau oră, așa că poate reprezenta doar date și ore ca șiruri. Un obiect netipizat poate fi convertit direct dintr-un șir în format ISO 8601 într-o dată, oră sau dată și oră. Pentru alte formate mai întâi convertiți câmpul JSON în text utilizând funcția Text() și apoi utilizați funcția DateValue(), TimeValue() sau DateTimeValue( ), care va folosi în mod implicit limba setărilor utilizatorului curent. | DateValue( ParseJSON("{ ""appuntament"": ""2022-05-10"" }").appuntament ) DataValue( Text( ParseJSON ("{ ""programare"": ""5 mai 2022"" }").programare ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON nu are un tip de date pentru GUI-uri, astfel încât acestea pot fi reprezentate doar ca șiruri. | GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
Hyperlink, Imagine, Media | { "URI": "https://northwindtraders.com/logo.jpg" } |
Aceste tipuri de date sunt tipuri de date text și pot fi convertite în text și apoi utilizate în Power Apps. | Text( ParseJSON ("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI ) |
Alegere | { "status": 1 } { "status": "Closed" } |
Opțiunile sunt prezentate ca șiruri localizate, susținute de un număr. Funcția JSON() serializează o alegere la numărul său de rezervă. Nu există o conversie directă de la număr sau șir la o alegere, dar funcțiile Switch() sau If() poate fi folosit pe valoarea textului sau a numărului. | Comutare( Valoare( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Stare.Deschis, 1, Stare.Închis ) |
Record | { "field": "value" } |
Nu există nicio conversie directă de la obiect JSON la o structură de înregistrare, dar câmpurile individuale pot fi preluate de la obiect netipizat pentru a crea o înregistrare. | { câmp: Text( ParseJSON( "{ ""câmp"": ""valoare"" }" ).câmp ) } |
Referință înregistrare | nu se aplică | Referințele înregistrărilor sunt unice pentru sursele de date și nu pot fi serializate sau neserializate. Valorile câmpurilor care reprezintă chei unice ar putea fi utilizate în JSON pentru a identifica înregistrările care pot fi apoi căutate. | nu se aplică |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON poate conține matrice, care pot fi convertite în tabele. Aceste valori pot fi vectori de înregistrări sau vectori de valori care sunt efectiv tabele cu o singură coloană. Matricele ParseJSON() pot fi convertite doar într-un singur tabel de coloană de obiecte netipizate și pot fi folosite ca atare sau convertite în tabele tipizate de înregistrează folosind ForAll(). | ForAll( Table( ParseJSON( "[ { ""id"": 1, ""nume"": ""unul"" }, { " "id"": 2, ""nume"": ""două"" } ]" ) ), { id: Valoare(ThisRecord.Value.id), nume: Text(ThisRecord.Value.name) } ) |
SMS | { "stringField": "this is text" } |
Textul este un tip explicit în JSON și poate fi convertit direct. | Text( ParseJSON( "{ ""stringField"": ""acesta este text"" }").stringField ) |
Două opțiuni | { "available": true } { "available": "Yes" } |
Două opțiuni sunt prezentate ca șiruri de caractere localizate, susținute de un boolean. Funcția JSON() serializează două opțiuni la valoarea sa booleană. Nu există o conversie directă de la boolean, număr sau șir la o alegere la două opțiuni, dar funcțiile Switch() sau If() poate fi folosit pe valoarea textului, numărului sau boolean. | Comutare( Boolean( ParseJSON( "{ ""disponibil"": true }" ).available ), false, Availability.No, adevărat, Disponibilitate.Da ) |
Exemple
Accesarea valorilor câmpurilor
Având în vedere următorul șir JSON într-o variabilă numită JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- Următoarea formulă, returnează textul
text value
:Text( ParseJSON( JsonString ).parent.child )
- Următoarea formulă, returnează numărul
567
:Value( ParseJSON( JsonString ).number )
În cazul în care un nume de câmp constă dintr-un nume de identificare nevalid, puteți pune numele câmpurilor între ghilimele simple.
Având în vedere următorul șir JSON într-o variabilă numită JsonString
{ "0": { "child-field": "text value" } }
- Următoarea formulă, returnează textul
text value
:Text( ParseJSON( JsonString ).'0'.'child-field' )
Blanks
Având în vedere următorul șir JSON într-o variabilă numită JsonString
{ "text": "text value" , "number": 567, "empty": null }
- Încercarea de a accesa câmpuri inexistente returnează Blank(). Următoarea formulă returnează
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Valorile JSON
null
sunt considerate Blank(). Următoarea formulă returneazătrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrice simple
Având în vedere următorul șir JSON într-o variabilă numită JsonString
{ "array": [1, 2, 3] }
- Accesarea celui de-al doilea număr din tabelul cu o singură coloană al câmpului matrice de untyped object și conversia într-un număr folosind Value() returnează
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Conversia tabelului cu o singură coloană al obiect netipizat în câmpul matrice, într-un tabel cu o singură coloană de numere
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Matrice de înregistrări
Având în vedere următorul șir JSON într-o variabilă numită JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
Conversia într-un tabel tip de înregistrări direct cu ForAll() se poate face utilizând
ThisRecord.[fieldname]
pentru a accesa obiect netipizat câmpuri și convertiți-le în tipuri cunoscute:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Matrice la tabel
- Conversia untyped object la un tabel utilizând funcția Table() rezultă un tabel cu o singură coloană de untyped objects. Obiectul trebuie apoi accesat utilizând coloana
Value
(singură) și convertit în tipuri, așa cum s-a explicat anterior.
Având în vedere următorul șir JSON într-o variabilă numită JsonString
{ "array": [1, 2, 3] }
Table() returnează un tabel cu o singură coloană de obiecte netipizate cu o valoare pe o singură coloană pentru numărul din matrice...
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() returnează un tabel cu o singură coloană de obiecte netipizate care reprezintă fiecare obiect json din matrice.
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Text( Index(untypedTable, 1).Value.name )