Partilhar via


Função ParseJSON

Aplica-se a: Aplicações de tela Aplicações condicionadas por modelo Power Pages Power Platform CLI

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. Boolean( 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 )
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 no 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 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("{ ""appointment"": ""2022-05-10"" }").appointment )
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, 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( "{ ""status"": 1 }" ).status ), 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. { field: 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 numa tabela de coluna única de objetos sem tipo e podem ser utilizadas como tal ou ser convertidas em tabelas com tipo de registos utilizando 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"": ""this is text"" }").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( Boolean( 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 }
  1. A fórmula seguinte obtém o texto text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. 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" } }
  1. 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 }
  1. 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 ) )
    
  2. Os valores JSON null são considerados Blank(). A fórmula que se segue obtém true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Matrizes Simples

Tendo em atenção a seguinte cadeia JSON numa variável denominada JsonString

{ "array": [1, 2, 3] }
  1. 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 ) )
    
  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"}
    ] }
  1. 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

  1. 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() obtém uma tabela de coluna única de objetos sem tipo 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() obtém 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 )