Función ParseJSON
Aplícase a: Aplicacións de lenzo Aplicacións baseadas en modelos Power Pages Power Platform CLI
Interpreta unha cadea JSON e devolve un obxecto sen escribir.
Descripción
A función ParseJSON analizará unha cadea JSON válida e devolverá un obxecto sen tipificar que representa a estrutura JSON.
A función ParseJSON pode devolver erros se o texto non é JSON válido segundo o formato de notación de obxectos JavaScript (JSON) descrito en ECMA-404 e IETF RFC 8259.
Sintaxe
ParseJSON( JSONString )
- JSONString – Obrigatorio. A estrutura JSON representada como texto.
Converter o tipo de datos de obxecto non tipificado
ParseJSON devolve un obxecto non tipificado que require a conversión explícita de valores de campo nos tipos de datos admitidos. A seguinte táboa enumera os tipos de datos en Power Apps e un tipo de datos JSON correspondente e como convertelo.
Tipo de datos | Exemplos de JSON | Descripción | Exemplo de conversión |
---|---|---|---|
Boolean | { "bool": true } |
O booleano é un tipo explícito en JSON e pódese converter directamente. | Boolean( ParseJSON ("{ ""bool"": true }").bool ) |
Cor | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
Non hai tipo de cor en JSON. Os valores de cor pódense crear a partir de enteiros RGBA ou cadeas hexadecimais. | ColorValue( ParseJSON( "{ ""cor"": ""#102030"" }" ).color ) Con( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"" : 0,5 }" ) }, RGBA(Valor(uo.r), Valor(uo.g), Valor(uo.b), Valor(uo.a))) |
Moeda, número | { "numbervalue": 123.5 } |
Os números represéntanse directamente en JSON cun punto ( . ) como separador decimal. | Valor( ParseJSON("{ ""númerovalor"": 123.5 }").númerovalor) |
Data, DataHora, Hora | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON non ten un tipo de data nin hora, polo que só pode representar datas e horas como cadeas. Un obxecto sen tipificar pódese converter directamente desde unha cadea en formato ISO 8601 a unha data, hora ou dataHora. Para outros formatos, primeiro transforme o campo JSON en texto mediante a función Text() e, a continuación, use a función DateValue(), TimeValue() ou DateTimeValue() que por defecto utilizará o idioma da configuración do usuario actual. | DateValue( ParseJSON("{ ""cita"": ""2022-05-10"" }").cita ) DataValue( Texto( ParseJSON ("{ ""cita"": ""5 de maio de 2022"" }").cita ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON non ten un tipo de datos para as GUI, polo que só se poden representar como cadeas. | GUID( ParseJSON ("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
Hiperligazón, Imaxe, Multimedia | { "URI": "https://northwindtraders.com/logo.jpg" } |
Estes tipos de datos son tipos de datos de texto e pódense converter en texto e, a continuación, utilizarse en Power Apps. | Texto( ParseJSON ("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI ) |
Opción | { "status": 1 } { "status": "Closed" } |
As opcións preséntanse como cadeas localizadas, apoiadas por un número. A función JSON() serializa unha opción ao seu número de apoio. Non hai conversión directa de número ou cadea a unha opción, pero as funcións Switch() ou If() pódense usar no valor do texto ou do número. | Cambiar( Valor( ParseJSON( "{ ""estado"": 1 }" ).status ), 0, Estado.Aberto, 1, Estado.Pechado ) |
Rexistro | { "field": "value" } |
Non hai conversión directa dun obxecto JSON a unha estrutura de rexistro, pero pódense recuperar campos individuais do obxecto sen tipificar para formar un rexistro. | { campo: Texto( ParseJSON( "{ ""campo"": ""valor"" }" ).campo ) } |
Referencia do rexistro | n/d | As referencias de rexistro son exclusivas das fontes de datos e non se poden serializar nin non serializar. Os valores de campo que representan claves únicas poderían usarse en JSON para identificar rexistros que logo se poden buscar. | n/d |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON pode conter matrices, que se poden converter en táboas. Estes valores poden ser matrices de rexistros ou matrices de valores que son efectivamente táboas dunha soa columna. As matrices ParseJSON() só se poden converter nunha única táboa de columnas de obxectos non tipificados, e pódense usar como tales ou converterse en táboas escritas de rexistra usando ForAll(). | ForAll( Táboa( ParseJSON( "[ { ""id"": 1, ""nome"": ""un"" }, { " "id"": 2, ""name"": ""dous"" } ]" ) ), { id: Value(ThisRecord.Value.id), nome: Text(ThisRecord.Value.name) } ) |
Mensaxe de texto | { "stringField": "this is text" } |
O texto é un tipo explícito en JSON e pódese converter directamente. | Texto( ParseJSON( "{ ""stringField"": ""este é texto"" }").stringField ) |
Dúas opcións | { "available": true } { "available": "Yes" } |
As dúas opcións preséntanse como cadeas localizadas, apoiadas por un booleano. A función JSON() serializa dúas opcións ao seu valor booleano. Non hai conversión directa de booleano, número ou cadea a dúas opcións, pero as funcións Switch() ou If() pódense usar no valor do texto, número ou valor booleano. | Cambiar( Boolean( ParseJSON( "{ ""dispoñible"": true }" ).dispoñible ), false, Availability.No, true, Dispoñibilidade.Si ) |
Exemplos
Acceso a valores de campo
Dada a seguinte cadea JSON nunha variable chamada JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- A seguinte fórmula devolve o texto
text value
:Text( ParseJSON( JsonString ).parent.child )
- A seguinte fórmula devolve o número
567
:Value( ParseJSON( JsonString ).number )
No caso de que un nome de campo conste dun nome de identificador non válido, pode poñer os nomes de campo entre comiñas simples.
Dada a seguinte cadea JSON nunha variable chamada JsonString
{ "0": { "child-field": "text value" } }
- A seguinte fórmula devolve o texto
text value
:Text( ParseJSON( JsonString ).'0'.'child-field' )
En branco
Dada a seguinte cadea JSON nunha variable chamada JsonString
{ "text": "text value" , "number": 567, "empty": null }
- Ao tentar acceder a campos non existentes devolve Blank(). A fórmula seguinte devolve
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Os valores JSON
null
considéranse Blank(). A fórmula seguinte devolvetrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrices simples
Dada a seguinte cadea JSON nunha variable chamada JsonString
{ "array": [1, 2, 3] }
- O acceso ao segundo número na táboa dunha soa columna do campo de matriz de obxecto sen tipificar e convertendo nun número mediante Value() devolve un
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Convertendo a táboa dunha soa columna de obxecto sen tipificar no campo da matriz nunha táboa de números dunha soa columna
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Matrices de rexistros
Dada a seguinte cadea JSON nunha variable chamada JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
A conversión a unha táboa tipificada de rexistros directamente con ForAll() pódese facer usando
ThisRecord.[fieldname]
para acceder a campos de obxecto non tipificado e convertelos en tipos coñecidos:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Matriz a Táboa
- A conversión dun obxecto non tipificado nunha táboa mediante a función Table() dá como resultado unha táboa dunha soa columna de obxectos non tipificados. A continuación, hai que acceder ao obxecto mediante a columna
Value
(única) e converterse en tipos como se explicou anteriormente.
Dada a seguinte cadea JSON nunha variable chamada JsonString
{ "array": [1, 2, 3] }
Table() devolve unha táboa dunha soa columna de obxectos sen escribir cun valor dunha soa columna para o número da matriz...
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() devolve unha táboa dunha soa columna de obxectos non tipificados que representa cada obxecto json da matriz.
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Text( Index(untypedTable, 1).Value.name )