Funció ParseJSON
S'aplica a: Aplicacions de llenç CLI d'aplicacions Power Pages Power Platform basades en models
Interpreta una cadena JSON i retorna un objecte sense tipus.
Descripció
La funció ParseJSON analitzarà una cadena JSON vàlida i retornarà un objecte sense tipus que representi l'estructura JSON.
La funció ParseJSON pot retornar errors si el text no és JSON vàlid segons el format JavaScript Object Notation (JSON) descrit a ECMA-404 i IETF RFC 8259.
Sintaxi
ParseJSON( JSONString )
- JSONString – Obligatori. L'estructura JSON representada com a text.
Convertir el tipus de dades d'objecte sense tipus
ParseJSON retorna un objecte sense tipus que requereix una conversió explícita de valors de camp en tipus de dades compatibles. A la taula següent s'enumeren els tipus de dades del Power Apps i un tipus de dades JSON corresponent i com convertir-les.
Tipus de dades | Exemples JSON | Descripció | Exemple de conversió |
---|---|---|---|
Boolean | { "bool": true } |
El booleà és un tipus explícit en JSON i es pot convertir directament. | Boolean( ParseJSON("{ ""bool"": true }").bool ) |
Color | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
No hi ha cap tipus de color al JSON. Els valors de color es poden crear a partir d'enters d'RGBA o cadenes hexadecimals. | ColorValue( ParseJSON( "{ ""color"": "#102030"" }" ).color ) With( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Valor( uo.r ), Valor( uo.g ), Valor( uo.b ), Valor( uo.a ) ) ) ) |
Divisa, número | { "numbervalue": 123.5 } |
Els nombres es representen directament en JSON amb un punt (.) com a separador de decimals. | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Date, DateTime, Time | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON no té un tipus de data o hora, així que només pot representar les dates i les hores com a cadenes. Un objecte sense tipus es pot convertir directament d'una cadena en format ISO 8601 a una data, una hora o un datetime. Per a la resta de formats, convertiu primer el camp JSON en text utilitzant la funció Text() i després utilitzeu la funció DateValue(), TimeValue() o DateTimeValue(), que per defecte utilitzarà el llenguatge de la configuració de l'usuari actual. | DateValue( ParseJSON("{ ""appointment"": "2022-05-10"" }").appointment ) DateValue( Text( ParseJSON("{ ""appointment"": ""5 de maig de 2022"" }").cita ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON no té un tipus de dades per als GUID, per la qual cosa només es poden representar com a cadenes. | GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000" }"").id ) |
HyperLink, Image, Media | { "URI": "https://northwindtraders.com/logo.jpg" } |
Aquests tipus de dades són tipus de dades de text i es poden convertir en text i després utilitzar-se al Power Apps. | Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }"). URI ) |
Elecció | { "status": 1 } { "status": "Closed" } |
Les opcions es presenten com a cadenes loicalitzades, amb el suport d'un número. La funció JSON() serialitza l'opció al número de suport. No hi ha cap conversió directa de número o cadena a una opció, però les funcions Switch() o If() es poden utilitzar en el valor del text o el valor numèric. | Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed ) |
Enregistra | { "field": "value" } |
No hi ha cap conversió directa d'un objecte JSON a una estructura de registres, però els camps individuals es poden recuperar de l'objecte sense tipus per formar un registre. | { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) } |
Referència de registre | n/d | Les referències de registre són úniques als orígens de dades i no es poden serialitzar ni no desserialitzar. Els valors de camp que representen claus úniques es poden utilitzar al JSON per identificar registres que després es poden cercar. | n/d |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
El JSON pot incloure matrius, que es poden convertir en taules. Aquests valors poden ser matrius de registres o matrius de valors que són efectivament taules d'una columna. Les matrius ParseJSON() només es poden convertir en una taula d'una sola columna d'objectes sense tip, i es poden utilitzar com a tals o convertir-se en taules de registres escrites utilitzant ForAll(). | ForAll( Table( ParseJSON( "[ { ""id"": 1, "name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } ) |
SMS | { "stringField": "this is text" } |
El text és un tipus explícit en JSON i es pot convertir directament. | Text( ParseJSON( "{ ""stringField"": ""això és text"" }").stringField ) |
Dues opcions | { "available": true } { "available": "Yes" } |
Les dues opcions es presenten com a cadenes loicalitzades, amb el suport d'un booleà. La funció JSON() serialitza dues opcions al seu valor booleà. No hi ha cap conversió directa de booleà, número o cadena a dues opcions, però les funcions Switch() o If() es poden utilitzar en el valor del text, del booleà o el valor numèric. | Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes ) |
Exemples
Accedir als valors de camp
A partir de la següent cadena JSON en una variable anomenada JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- La fórmula següent retorna el text
text value
:Text( ParseJSON( JsonString ).parent.child )
- La fórmula següent retorna el número
567
:Value( ParseJSON( JsonString ).number )
En cas que un nom de camp consisteixi en un nom d'identificador no vàlid, podeu col·locar els noms dels camps en cometes simples.
A partir de la següent cadena JSON en una variable anomenada JsonString
{ "0": { "child-field": "text value" } }
- La fórmula següent retorna el text
text value
:Text( ParseJSON( JsonString ).'0'.'child-field' )
Buits
A partir de la següent cadena JSON en una variable anomenada JsonString
{ "text": "text value" , "number": 567, "empty": null }
- Si intenteu accedir als camps que no existeixen, es retorna Blank(). La fórmula següent retorna
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Els valors JSON
null
es consideren Blank(). La fórmula següent retornatrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrius simples
A partir de la següent cadena JSON en una variable anomenada JsonString
{ "array": [1, 2, 3] }
- Accedir al segon número de la taula d'una única del camp de la matriu amb objectes sense tipus i convertir-lo en un número amb Value() retorna
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Convertir la taula d'una única columna de l'objecte sense tipus al camp de la matriu, en una taula d'una única columna amb els números
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Matrius de registres
A partir de la següent cadena JSON en una variable anomenada JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
La conversió en una taula amb tipus de registres directament amb ForAll() es pot fer mitjançant
ThisRecord.[fieldname]
per accedir als camps d'objectes sense tipus i convertir-los en tipus coneguts:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Matriu a taula
- La conversió d'un objecte sense tipus en una taula mitjançant la funció Table() resulta en una taula d'una única columna amb objectes sense tipus. A continuació, cal accedir a l'objecte mitjançant una (única) columna
Value
i convertir-la en tipus tal com s'ha explicat anteriorment.
A partir de la següent cadena JSON en una variable anomenada JsonString
{ "array": [1, 2, 3] }
Table() retorna una taula d'una sola columna d'objectes sense tipus amb un valor d'una sola columna per al nombre a la matriu...
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() retorna una taula d'una sola columna d'objectes sense tipus que representa cada objecte json de la matriu.
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Text( Index(untypedTable, 1).Value.name )