Função ParseJSON
Aplica-se a: Aplicativos Canvas Aplicativos baseados em modelo Power Pages Power Platform CLI
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
AnalisarJSON( 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. | booliano( ParseJSON("{ ""bool"": verdadeiro }").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. | ValorCor( ParseJSON( "{ ""cor"": ""#102030"" }" ).cor ) Com( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Valor( uo.r ), Valor( uo.g ), Valor( uo.b ), Valor( uo.a ) ) ) |
Moeda, Número | { "numbervalue": 123.5 } |
Os números são representados diretamente em JSON com um ponto ( . ) como o separador decimal. | Valor( ParseJSON("{ ""valor numérico"": 123,5 }").valor numérico ) |
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("{ ""compromisso"": ""2022-05-10"" }").compromisso ) DateValue( Text( ParseJSON("{ ""appointment"": ""5 de maio de 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. | Texto( 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( Valor( 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. | { campo: Texto( ParseJSON( "{ ""campo"": ""valor"" }" ).campo ) } |
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. Os arrays ParseJSON() só podem ser convertidos em uma tabela de coluna única de objetos não tipados e podem ser usados como tal ou convertidos em tabelas de registros tipados usando ForAll(). | ForAll( Table( ParseJSON( "[ { ""id"": 1, ""nome"": ""one"" }, { " "id"": 2, ""nome"": ""dois"" } ]" ) ), { id: Valor(ThisRecord.Value.id), nome: Texto(ThisRecord.Value.name) } ) |
Texto | { "stringField": "this is text" } |
Text é um tipo explícito em JSON e pode ser convertido diretamente. | Texto( ParseJSON( "{ ""stringField"": ""este é um texto"" }").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( booliano( ParseJSON( "{ ""disponível"": true }" ).disponível ), false, Availability.No, true, Disponibilidade.Sim ) |
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] }
Table() retorna uma tabela de coluna única de objetos não tipados 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 objetos não tipados que representa cada objeto json na matriz.
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Text( Index(untypedTable, 1).Value.name )