Partilhar via


ParseJSON Função

Aplica-se a: Aplicativos do Canvas Aplicativos orientados por modelo do Copilot Studio Funções do Power Platform CLI Dataverse Power Pages

Interpreta uma cadeia de caracteres JSON e retorna um valor Dynamic ou um valor tipado específico se um tipo for fornecido.

Importante

Descrição

A ParseJSON função analisa uma cadeia de caracteres JSON válida e retorna um valor Dynamic que representa a estrutura JSON.

Opcionalmente, use o segundo argumento para converter o JSON num objeto com tipo que pode ser usado diretamente em fórmulas do Power Fx. Isto facilita o consumo do resultado, pois as conversões e coerções no ponto de utilização já não necessárias. O JSON sem tipo é mapeado para o tipo com estas regras:

  • As colunas no tipo que não estão presentes no JSON são preenchidas com em branco.
  • As colunas no JSON que não estão presentes no tipo são ignoradas.
  • Colunas que estão no tipo e no JSON, o valor do JSON tem de ser coercível para o tipo.

A ParseJSON função pode retornar erros se o texto não for JSON válido de acordo com o formato JSON (JavaScript Object Notation) descrito em ECMA-404 e IETF RFC 8259.

Sintaxe

ParseJSON( JSONString [ , Tipo ] )

  • JSONString – Obrigatório. A estrutura JSON representada como texto.
  • Type — Opcional. A definição de tipo do Power Fx para a estrutura JSON. Sem esse argumento, retorna um valor dinâmico, ParseJSON com ele a função retorna um valor digitado específico.

Convertendo valores dinâmicos

Sem o segundo argumento, ParseJSON retorna um valor Dynamic que requer conversão explícita de valores de campo em tipos de dados suportados. A tabela seguinte lista os tipos de dados no Power Apps e um tipo de dados JSON correspondente e como convertê-lo.

Tipo de dados Exemplos de JSON Descrição Conversão de exemplo
booleano { "bool": true } Booleano é um tipo explícito no JSON e pode ser convertido diretamente. Booleano( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Não existe tipo de cor no JSON. Os valores de cor podem ser criados a partir de números inteiros de RGBA ou cadeias hexadecimais. ColorValue( ParseJSON( "{ ""color"": ""#102030"" }" ).color )
Com( { 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 são representados diretamente no JSON com um ponto (.) como o separador decimal. value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Data, DateTime, Hora { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
O JSON não tem um tipo de data ou de hora, pelo que só pode representar datas e horas como cadeias. Um valor dinâmico pode ser convertido diretamente de uma cadeia de caracteres no formato ISO 8601 para uma data, hora ou data/hora. Para outros formatos, converta primeiro o campo JSON em texto utilizando a função Text() e, em seguida, utilize a função DateValue(), TimeValue() ou DateTimeValue() que, por predefinição, irá utilizar o idioma das definições do utilizador atual. DateValue( ParseJSON("{ ""compromisso"": ""2022-05-10"" }").nomeação )
DateValue( Text( ParseJSON("{ ""compromisso"": ""5 de maio de 2022"" }").appointment )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } O JSON não tem um tipo de dados para GUIDs, pelo que só pode ser representado como cadeias. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Ligação, Imagem, Multimédia { "URI": "https://northwindtraders.com/logo.jpg" } Estes tipos de dados são tipos de dados de texto e podem ser convertidos em texto e, em seguida, utilizados no Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }"). URI )
Opção { "status": 1 }
{ "status": "Closed" }
Escolhas são apresentadas como cadeias localizadas, apoiadas por um número. A função JSON() serializa uma escolha para o número de apoio. Não existe conversão direta de número ou cadeia para uma escolha, mas as funções Switch() ou If() podem ser utilizadas no valor de texto ou de número. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Registo { "field": "value" } Não há conversão direta de um objeto JSON para uma estrutura de registro, mas campos individuais podem ser recuperados do valor Dynamic para formar um registro. { campo: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Referência de Registo n/d As referências de registo são exclusivas das origens de dados e não podem ser serializadas ou não serializadas. No JSON, é possível utilizar valores de campos que representem chaves exclusivas para identificarem registo que possam ser procurados. n/d
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
O JSON pode conter matrizes, as quais podem ser convertidas em tabelas. Estes valores podem ser matrizes de registos ou matrizes de valores que são, efetivamente, tabelas de coluna única. ParseJSON() matrizes só podem ser convertidas em uma única tabela de coluna de valores dinâmicos , e podem ser usadas como tal ou convertidas em tabelas tipadas de registros usando ForAll(). ForAll( Table( ParseJSON( "[ { ""id""": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Texto { "stringField": "this is text" } Texto é um tipo explícito no JSON e pode ser convertido diretamente. Text( ParseJSON( "{ ""stringField"": ""isto é texto"" }").stringField )
Duas opções { "available": true }
{ "available": "Yes" }
Duas opções são apresentadas como cadeias localizadas, apoiadas por um booleano. A função JSON() serializa duas opções para o respetivo valor booleano. Não existe conversão direta de booleano, número ou cadeia para duas opções, mas as funções Switch() ou If() podem ser utilizadas no valor de texto, número ou booleano. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Exemplos

Aceder a valores de campo

Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. A fórmula seguinte obtém o texto text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. A fórmula seguinte obtém o número 567:
    Value( ParseJSON( JsonString ).number )
    

Caso um nome de campo seja composto por um nome de identificador inválido, pode colocar os nomes de campo entre plicas. Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "0": { "child-field": "text value" } }
  1. A fórmula seguinte obtém o texto text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Espaços em branco

Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. A tentativa de aceder a campos não existentes obtém Blank(). A fórmula que se segue obtém true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Os valores JSON null são considerados Blank(). A fórmula que se segue obtém true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Matrizes Simples

Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "array": [1, 2, 3] }
  1. Acessar o segundo número na tabela de coluna única de valores dinâmicos do campo de matriz e converter em um número usando Value() retorna 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Convertendo a tabela de coluna única de valores dinâmicos no campo de matriz, em uma única tabela de números { Value: 1 }, { Value: 2 }, { Value: 3 }de coluna :
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Matrizes de Registos

Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. A conversão para uma tabela tipada de registros diretamente com ForAll() pode ser feita usando ThisRecord.[fieldname] para acessar campos dinâmicos e convertê-los em tipos específicos:

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

Matriz para Tabela

  1. A conversão de valores dinâmicos em uma tabela usando a função Table() resulta em uma tabela de coluna única de valores dinâmicos . O objeto precisa então de ser acedido através da utilização da coluna (única) Value e de ser convertido em tipos, conforme explicado anteriormente.

Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "array": [1, 2, 3] }

Table() retorna uma tabela de coluna única de valores dinâmicos com um valor de coluna única 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() retorna uma tabela de coluna única de valores dinâmicos que representa cada objeto json na matriz.

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