Compartilhar via


Função ParseJSON

Aplica-se a: Aplicativos de tela Aplicativos baseados em modelo CLI do Power Platform

Interpreta uma cadeia de caracteres JSON e retorna um objeto sem tipo.

Description

A função ParseJSON analisará uma cadeia de caracteres JSON válida e retornará um objeto sem tipo representando a estrutura JSON.

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

Sintaxe

ParseJSON( JSONString )

  • JSONString - obrigatório. A estrutura JSON representada como texto.

Converter tipo de dados de Objeto sem tipo

ParseJSON retorna um objeto sem tipo que requer 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
Boolean { "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 objeto sem tipo pode ser convertido diretamente de uma cadeia de caracteres no formato ISO 8601 em 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 em uma estrutura de registro, mas campos individuais podem ser recuperados do objeto sem tipo para formar um registro. { field: Text( ParseJSON( "{ ""field"": ""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. As matrizes de ParseJSON() só podem ser convertidas em uma tabela de coluna única de objetos sem tipo e podem ser usadas como tal ou convertidas em tabelas de registros com tipo 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 do objeto sem tipo e converter em um número usando Value() retorna 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Converter a tabela de coluna única do objeto sem tipo no campo de matriz em uma tabela de coluna única 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. É possível converter para uma tabela de registros com tipos diretamente com ForAll() usando ThisRecord.[fieldname] para acessar os campos objeto sem tipo e convertê-los em tipos conhecidos:

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

Matriz para tabela

  1. Converter o objeto sem tipo para uma tabela usando os resultados da função Table() resulta em uma tabela de coluna única de objetos sem tipo. 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] }

O objeto Table() retorna uma tabela de coluna única de objetos sem tipo 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"}
 ] }

O objeto Table() retorna uma tabela de coluna única de objetos sem tipo que representa cada objeto json na matriz.

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