Compartir por


ParseJSON Función

Aplícase a: Aplicacións de lenzo Copilot Studio Aplicacións baseadas en modelos Power Platform CLI Funcións de Dataverse Power Pages

Interpreta unha cadea JSON e devolve un valor Dynamic ou un valor específico se se proporciona un tipo.

Importante

Descripción

A ParseJSON función analiza unha cadea JSON válida e devolve un valor Dynamic que representa a estrutura JSON.

Opcionalmente, utiliza o segundo argumento para converter o JSON nun obxecto escrito que se pode usar directamente nas fórmulas Power Fx . Isto fai que o resultado sexa máis fácil de consumir xa que xa non son necesarias conversións e coaccións no punto de uso. O JSON non tipificado está asignado ao tipo con estas regras:

  • As columnas do tipo que non están presentes no JSON énchense con en branco.
  • Ignoranse as columnas do JSON que non están presentes no tipo.
  • Nas columnas que están tanto no tipo como en JSON, o valor JSON debe ser coercible para o tipo.

A ParseJSON función pode devolver erros se o texto non é JSON válido segundo o formato JavaScript Object Notation (JSON) descrito en ECMA-404 e IETF RFC 8259.

Sintaxe

ParseJSON( JSONString [ , Tipo ] )

  • JSONString – Obrigatorio. A estrutura JSON representada como texto.
  • Tipo - Opcional. A Power Fx definición de tipo para a estrutura JSON. Sen este argumento, ParseJSON devolve un valor dinámico; con el a función devolve un valor específico.

Conversión de valores dinámicos

Sen o segundo argumento, ParseJSON devolve un valor Dynamic que require a conversión explícita dos valores de campo nos tipos de datos soportados. 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
booleano { "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""": 128, ""b""": 0, ""a""": 0.5 }" ) }, RGBA( Value( uo.r ), Value( uo.g ), Value( uo.b ) )
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 valor dinámico pode converterse directamente dunha cadea en formato ISO 8601 a unha data, hora ou data. 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 valor Dinámico 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. ParseJSON() só se poden converter nunha soa táboa de columnas de valores dinámicos, e poden ser usadas como tales ou convertidas en táboas de rexistros usando 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. Accedendo ao segundo número na táboa dunha soa columna do campo de matrices de valores dinámicos e converténdose a un número usando Value() dólvese 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Convertendo a táboa dunha soa columna de valores dinámicos no campo de matrices nunha táboa de números { Value: 1 }, { Value: 2 }, { Value: 3 }dunha soa columna:
    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 de rexistros tipificada directamente con ForAll() pode facerse usando ThisRecord.[fieldname] para acceder a campos dinámicos e convertelos en tipos específicos:

    ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
    

Matriz a Táboa

  1. Convertendo valores dinámicos nunha táboa usando a función Table() orixina unha táboa de valores dinámicos dunha soa columna. 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 valores dinámicos cun valor dunha soa columna para o número na 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 valores dinámicos que representa cada obxecto json da matriz.

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