Função ParseJSON
Aplica-se a: Aplicativos de tela CLI de aplicativos Power Pages Power Platform controlados por modelo
Interpreta uma cadeia JSON e obtém um objeto sem tipo.
Descrição
A função ParseJSON irá analisar uma cadeia JSON válida e obter um objeto sem tipo que representa a estrutura JSON.
A função ParseJSON pode obter erros se o texto não for de 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 o tipo de dados de Objeto sem tipo
ParseJSON obtém um objeto sem tipo que requer a 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 |
---|---|---|---|
Boolean | { "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. | valor( 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 objeto sem tipo pode ser convertido diretamente a partir de uma cadeia no formato ISO 8601 para uma data, hora ou datetime. 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("{ ""nomeação"": ""5 de maio de 2022"" }").nomeação ) |
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( "{ "estatuto"": 1 }" ).estatuto ), 0, Status.Open, 1, Status.Closed ) |
Registo | { "field": "value" } |
Não existe conversão direta de um objeto JSON para uma estrutura de registos, mas os campos individuais podem ser obtidos do objeto sem tipo para formar um registo. | { 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. As matrizes ParseJSON() só podem ser convertidas em uma única tabela de coluna de objetos não tipados 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" } |
Texto é um tipo explícito no JSON e pode ser convertido diretamente. | Text( ParseJSON( "{ ""stringField"": ""este é 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( booleano( 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 }
- A fórmula seguinte obtém o texto
text value
:Text( ParseJSON( JsonString ).parent.child )
- 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" } }
- 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 }
- 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 ) )
- Os valores JSON
null
são considerados Blank(). A fórmula que se segue obtémtrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrizes Simples
Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString
{ "array": [1, 2, 3] }
- Aceder ao segundo número na tabela de coluna única do campo de matriz de objeto sem tipo e converter para um número utilizando Value() obtém
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Converter a tabela de coluna única de objeto sem tipo no campo de matriz para uma tabela de coluna única de números
{ Value: 1 }, { Value: 2 }, { Value: 3 }
: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"}
] }
A conversão numa tabela com tipo de registos diretamente com a ForAll() pode ser feito utilizando
ThisRecord.[fieldname]
para aceder a campos de 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 objeto sem tipo numa tabela utilizando a função Table() resulta numa tabela de coluna única de objetos sem tipo. 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 objetos não tipados 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 objetos não tipados que representa cada objeto json na matriz.
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Text( Index(untypedTable, 1).Value.name )