JSONParse

Analisa o texto como dados JSON e mantém a representação JSON analisada na memória para você reutilizar em outras funções JSON.

Formato 

JSONParse (json)

Parâmetros 

json - qualquer expressão de texto ou campo que contém um objeto ou matriz JSON.

Tipo de dados retornado 

texto

Originada na versão 

22.0

Descrição 

Primeiro, JSONParse avalia a expressão de texto de entrada json, depois analisa o texto JSON e armazena em cache uma representação binária na memória. Quando JSONParse define uma variável, parâmetro de script ou é usado em outros cálculos, essa representação binária fica disponível para outras funções JSON processarem os dados analisados.

JSONParse retorna o texto original inalterado se json for válido ou retorna uma mensagem de erro se for inválido. Para um JSON inválido, JSONParse retorna uma mensagem de erro que começa com "?" seguido por informações sobre o erro de análise, semelhante a outras funções JSON.

Veja Otimização do desempenho do JSON.

Notas 

  • Em operações JSON únicas, usar outras funções JSON diretamente no texto pode funcionar tão bem quanto usar o JSONParse primeiro.

  • Você pode usar a Função JSONParsedState para verificar se os dados JSON foram analisados com sucesso e são válidos.

Exemplo 1 - Análise básica de um objeto JSON simples

JSONParse ( "{ \"nome\": \"Alea\", \"idade\": 30, \"cidade\": \"Nova York\" }" ) returns { "nome": "Alea", "idade": 30, "cidade": "Nova York" }, que é a representação de texto inalterada dos dados JSON.

Se definido como uma variável $$Contact, a representação binária é armazenada em cache na memória e disponibilizada para cálculos que usam $$Contact.

Copiar
Let ( [
  $$Contact = JSONParse ( "{ \"nome\": \"Alea\", \"idade\": 30, \"cidade\": \"Nova York\" }" )
  ] ;
  $$Contact
)

Se o JSON for inválido, JSONParse analisa os dados, mas retorna uma mensagem de erro. Por exemplo, se faltar a primeira vírgula no JSON acima, JSONParse retorna:

Copiar
? * Linha 1, Coluna 18
  Ausente ',' or '}' na declaração de objeto

Exemplo 2 - Análise de vários objetos JSON

Usa JSONParse para analisar o texto JSON em $JSONText1 e $JSONText2, depois recupera elementos das variáveis $ParsedJSON1 e $ParsedJSON2 sem fazer com que os dados JSON sejam analisados novamente.

Copiar
Definir variável [ $ParsedJSON1 ; Valor: JSONParse ( $JSONText1 ) ]
Definir variável [ $ParsedJSON2 ; Valor: JSONParse ( $JSONText2 ) ]
Definir variável [ $name ; Valor: JSONGetElement ( $ParsedJSON1 ; "name" ) ]
Definir variável [ $id ; Valor: JSONGetElement ( $ParsedJSON2 ; "id" ) ]
Definir variável [ $category ; Valor: JSONGetElement ( $ParsedJSON1 ; "categoria" ) ]

Exemplo 3 - Verificação de erros e uso do JSON analisado em um loop

Demonstra a verificação de erros e mostra como usar JSONParse para melhorar o desempenho com o processamento de vários elementos dos mesmos dados JSON em um loop. $$JSON contém o texto JSON nos Exemplo de dados JSON. Depois que o script analisa $$JSON, ele verifica se o JSON analisado é válido (caso a Função JSONParsedState retorne um valor positivo). Se o JSON analisado for válido, o script percorre a matriz bakery.product e obtém valores dos dados JSON já analisados.

Copiar
Definir variável [ $ParsedJSON ; Valor: JSONParse ( $$JSON ) ]
Se [ JSONParsedState ( $ParsedJSON ) > 0 ]
   # JSON é válido. Use o JSON analisado para várias operações.
   Definir variável [ $ProductCount ; Valor: ValueCount ( JSONListKeys ( $ParsedJSON ; "bakery.product" ) ) ]
   Definir variável [ $i ; Valor: 0 ]
   Loop [ Limpar: Sempre ]
      Definir variável [ $Product ; Valor: JSONGetElement ( $ParsedJSON ; "bakery.product[" & $i & "]" ) ]
      Definir variável [ $ProductName ; Valor: JSONGetElement ( $Product ; "nome" ) ]
      Definir variável [ $ProductPrice ; Valor: JSONGetElement ( $Product ; "preço" ) ]
      # Processar dados do produto...
      Definir variável [ $i ; Valor: $i + 1 ]
      Exit Loop If [ $i ≥ $ProductCount ]
   End Loop
Else
   # Tratar do erro de análise de JSON
   Mostrar caixa de diálogo personalizada [ "Erro JSON" ; $ParsedJSON ]
End If