Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: Aplicativos de tela
Aplicativos baseados em modelo
Power Pages
Power Platform CLI
Interpreta uma cadeia de caracteres JSON e retorna um objeto sem tipo ou objeto com tipo.
Importante
- Usar o segundo argumento para ParseJSON converter em um objeto com tipo é um recurso experimental.
- Os recursos experimentais não foram criados para uso em ambientes de produção e podem ter funcionalidade restrita. Esses recursos são disponibilizados antes de um lançamento oficial para que você possa ter acesso antecipado e fornecer comentários. Mais informações: Compreender os recursos experimentais, em versão preliminar e descontinuados em aplicativos de tela
- O comportamento que este artigo descreve está disponível somente quando o recurso experimental Tipos definidos pelo usuário em Configurações > Recursos futuros > Experimentais está ativado (está desativado por padrão).
- Seus comentários são muito importantes para nós. Diga o que você pensa no fórum da comunidade de recursos experimentais do Power Apps.
Description
A função ParseJSON analisa uma cadeia de caracteres JSON válida e retorna um objeto sem tipo 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 usar, pois conversões e coerções no ponto de uso não são mais 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 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 função ParseJSON 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.
- Tipo - Opcional. A definição do tipo de Power Fx para a estrutura JSON. Sem esse argumento, ParseJSON retorna um objeto sem tipo, com ele a função retorna um objeto fortemente tipado.
Converter tipo de dados de Objeto sem tipo
Sem o segundo argumento, ParseJSON retorna um objeto sem tipo definido 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 }
- A fórmula a seguir retorna o texto
text value
:Text( ParseJSON( JsonString ).parent.child )
- 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" } }
- 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 }
- A tentativa de acessar campos não existentes retorna Blank(). A fórmula a seguir retorna
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Os valores
null
JSON são considerados Blank(). A fórmula a seguir retornatrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrizes Simples
Considerando a seguinte cadeia de caracteres JSON em uma variável chamada JsonString
{ "array": [1, 2, 3] }
- 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 ) )
- 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"}
] }
É 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
- 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 )