Compartilhar via


ParseJSON Função

Aplica-se a: Aplicativos de tela Copilot Studio Aplicativos baseados em modelo Power Platform CLI Dataverse funções Power Pages

Interpreta uma cadeia de caracteres JSON e retorna um valor dinâmico ou um valor digitado específico se um tipo for fornecido.

Importante

Description

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

Como opção, use o segundo argumento para converter o JSON em um objeto tipado que pode ser usado diretamente em fórmulas do Power Fx. Isso torna o resultado mais fácil de consumir, pois conversões e coerções no ponto de uso não são mais necessárias. O JSON não tipado é mapeado para o tipo com estas regras:

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

A ParseJSON função poderá 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.
  • Tipo - Opcional. A definição do tipo de Power Fx para a estrutura JSON. Sem esse argumento, ParseJSON retorna um valor dinâmico; com ele, a função retorna um valor tipado específico.

Convertendo valores dinâmicos

Sem o segundo argumento, ParseJSON retorna um valor dinâmico que requer a conversão explícita de valores de campo em tipos de dados com suporte. A tabela a seguir lista os tipos de dados no Power Apps e um tipo de dados JSON correspondente e como convertê-los.

Tipo de dados Exemplos JSON Description Conversão de exemplo
booleano { "bool": true } Boolean é um tipo explícito em JSON e pode ser convertido diretamente. Boolean( ParseJSON("{ "bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Não há um tipo de cor em JSON. Os valores de cor podem ser criados com base em inteiros RGBA ou cadeias de caracteres 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 são representados diretamente em 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 hora, portanto, só pode representar datas e horas como cadeias de caracteres. Um valor dinâmico pode ser convertido diretamente de uma cadeia de caracteres no formato ISO 8601 para uma data, hora ou datetime. Para outros formatos, primeiro converta o campo JSON em texto usando a função Text() e, em seguida, use a função DateValue(), TimeValue() ou DateTimeValue() que, por padrão, usará o idioma das configurações do usuário atual. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }"). appointment )
DateValue( Text( ParseJSON("{ "appointment"": ""May 5, 2022"" }"). appointment )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } O JSON não tem um tipo de dados para GUIds, então eles só podem ser representados como cadeias de caracteres. GUID( ParseJSON("{ "id"": ""123e4567-e89b-12d3-a456-426655440000"" }"). id )
Hiperlink, Imagem, Mí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 usados no Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }"). URI )
Opção { "status": 1 }
{ "status": "Closed" }
As opções são apresentadas como cadeias de caracteres localizadas, com suporte de um número. A função JSON() serializa uma opção para seu número de suporte. Não há conversão direta de número ou cadeia de caracteres em uma opção, mas as funções Switch() ou If() podem ser usadas no valor de texto ou número. Switch( Value( ParseJSON( "{ "status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Registro { "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 dinâmico para formar um registro. { campo: Texto( ParseJSON( "{ "campo"": ""value"" }" ).field ) }
Referência de Registro n/d As referências de registro são exclusivas das fontes de dados e não podem ser serializadas ou desserializadas. Os valores de campo que representam chaves exclusivas podem ser usados em JSON para identificar registros que podem então ser consultados. n/d
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
O JSON pode conter matrizes, que podem ser convertidas em tabelas. Esses valores podem ser matrizes de registros ou matrizes de valores que são efetivamente tabelas de coluna única. ParseJSON() As matrizes só podem ser convertidas em uma única tabela de colunas de valores dinâmicos e podem ser usadas como tal ou convertidas em tabelas de registros tipadas 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" } Text é um tipo explícito em JSON e pode ser convertido diretamente. Text( ParseJSON( "{ "stringField"": ""this is text"" }"). stringField )
Duas opções { "available": true }
{ "available": "Yes" }
Duas opções são apresentadas como cadeias de caracteres localizadas, com suporte de um booliano. A função JSON() serializa duas opções para seu valor booliano. Não há conversão direta de booliano, número ou cadeia de caracteres em duas opções, mas as funções Switch() ou If() podem ser usadas no valor de texto, número ou booliano. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Exemplos

Acessar valores de campo

Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString

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

Caso um nome de campo consista em um nome de identificador inválido, você pode colocar os nomes dos campos entre aspas simples. Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString

{ "0": { "child-field": "text value" } }
  1. A fórmula a seguir retorna o texto text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Em branco

Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString

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

Matrizes Simples

Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString

{ "array": [1, 2, 3] }
  1. Acessar o segundo número na tabela de coluna única do campo de matriz de valores dinâmicos 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 colunas de números { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Matrizes de Registros

Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. A conversão em 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. Converter valores dinâmicos em uma tabela usando a função Table() resulta em uma tabela de coluna única de valores dinâmicos . Então, o objeto precisa ser acessado usando a coluna Value (único) e ser convertido em tipos conforme explicado anteriormente.

Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString

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

Table() retorna uma tabela de coluna única de valores dinâmicos com um valor de coluna única para 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 )