Compartir por


Función ParseJSON

Aplícase a: Aplicacións de lenzo Aplicacións baseadas en modelos 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 é un 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( "{ ""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 ) ) )
Moeda, número { "numbervalue": 123.5 } Os números represéntanse directamente en JSON cun punto ( . ) como separador decimal. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
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("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) )
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. Text( 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. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
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. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
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ó poden converterse nunha única táboa de columnas de obxectos non tipificados, e pódense usar como tales ou converterse en táboas escritas de rexistros mediante ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Mensaxe de texto { "stringField": "this is text" } O texto é un tipo explícito en JSON e pódese converter directamente. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").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. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Exemplos

Acceso a valores de campo

Dada a seguinte cadea JSON nunha variable chamada JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. A seguinte fórmula devolve o texto text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. 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" } }
  1. 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 }
  1. Ao tentar acceder a campos non existentes devolve Blank(). A fórmula seguinte devolve true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Os valores JSON null considéranse Blank(). A fórmula seguinte devolve true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Matrices simples

Dada a seguinte cadea JSON nunha variable chamada JsonString

{ "array": [1, 2, 3] }
  1. 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 ) )
    
  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"}
    ] }
  1. 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

  1. 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 columna de obxectos sen tipificar cun valor dunha 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 sen tipificar que representa cada obxecto json na matriz.

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