Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v20 R7
JSON Parse

JSON Parse 


 

JSON Parse ( cadeiaJSON {; tipo}{; *} ) -> Resultado 
Parâmetro Tipo   Descrição
cadeiaJSON  String in Cadeia em JSON a analisar
tipo  Inteiro longo in Tipo no qual converter os valores
Operador in Adiciona uma posição de linha e offset de cada propriedade se o valor retornado for um objeto
Resultado  Objeto, Mixed in Valores extraídos da cadeia JSON

O comando JSON Parse analisa o conteúdo de uma cadeia com formato JSON e extraem os valores que podem armazenar em um campo ou variável 4D. Este comando não realiza os dados JSON, realiza a ação inversa do comando JSON Stringify.

Em cadeiaJSON, passe a cadeia com formato JSON cujo conteúdo deseja analisar. Esta cadeia deve ter o formato correto, caso contrário é gerado um erro de análise.

Nota: Se utilizar ponteiros, deve chamar ao comando JSON Stringify antes de chamar a JSON Parse.

Por padrão, se omitir o parâmetro tipo, 4D tentará converter o valor obtido no tipo da variável ou do campo que se utiliza para armazenar os resultados (se foi definido). Caso contrário, 4D tenta deduzir seu tipo. Também pode forçar a interpretação do tipo passando o parâmetro tipo: passe uma das seguintes constantes, disponíveis no tema Tipos de campos e variáveis:

Constante Tipo Valor
Is Boolean Inteiro longo 6
Is collection Inteiro longo 42
Is date Inteiro longo 4
Is longint Inteiro longo 9
Is object Inteiro longo 38
Is real Inteiro longo 1
Is text Inteiro longo 2
Is time Inteiro longo 11



Notas:

  • Os valores de tipo Real devem ser incluídos na classificação ± 10.421e±10
  • Nos valores de tipo de texto, todos os caracteres especiais devem ser evadidos, incluindo as aspas (ver exemplos)
  • Como padrão quando usa a constante Is date, o comando considera que uma string de dados contém uma hora local e não GMT. Pode moficar essa configuração usando o seletor Dates inside objects ou o comando [#cmd id="642"/].
  • A partir de  4D v16 R6, se a configuração de armazenamento de dados atual for "date type", strings de data JSOn em formato "AAAA-MM-DD" são retornadas automaticamente como valores de data pelo comando JSON Parse. Para saber mais sobre essa configuração, vjea a opção "Use date type instead of ISO date format in objects" em Página Compatibilidade..
  • Valores tipo hora podem ser retornados de números em strings. Como padrão 4D considera o o valor como número de segundos.

Se passar o parâmetro opcional * e se o parâmetro jsonString representar um objeto, o objeto retornado contém uma propriedade adicional chamada __symbols que oferece rota, posição de linha e o deslocamento de linha de cada propriedade e sub-propriedade do objeto. Essa informação pode ser útil para debugar. A estrtura das propriedades  __symbols é:

__symbols:{//descrição objeto
   myAtt.mySubAtt...:{ //propriedade rota
      line:10, //número da linha da propriedade
      offset:35 //deslocamento de linha da propriedade do começo da linha
      }
   }


Nota: O parâmetro * é ignorado se o valor retornado não for do tipo objeto.

Exemplos de conversões simples:

 C_REAL($r)
 $r:=JSON Parse("42.17") //$r = 42,17 (Real)
 
 C_LONGINT($el)
 $el:=JSON Parse("120.13";Is longint//$el=120
 
 C_TEXT($t)
 $t:=JSON Parse("\"Year 42\"";Is text// $t="Year 42" (text)
 
 C_OBJECT($o)
 $o:=JSON Parse("{\"name\":\"jean\"}")
  // $o = {"name":"john"} (4D object)
 
 C_BOOLEAN($b)
 $b:=JSON Parse("{\"manager\":true}";Is Boolean// $b=true
 
 C_TIME($h)
 $h:=JSON Parse("5120";Is time//$h=01:25:20

Exemplo de conversão de dados de tipo data:

 $test:=JSON Parse("\"1990-12-25T12:00:00Z\"")
  // $test="1990-12-25T12:00:00Z"
 C_DATE($date;$date2;$date3)
 $date:=JSON Parse("\"2008-01-01T12:00:00Z\"";Is date)
  //$date=01/01/08
 $date2:=JSON Parse("\"2017-07-13T23:00:00.000Z\"";Is date)
  //$date2=14/07/17 (Paris time zone)
 SET DATABASE PARAMETER(Dates inside objects;String type without time zone)
 $date3:=JSON Parse("\"2017-07-13T23:00:00.000Z\"";Is date)
  //$date3=13/07/17

Se a configuração atual de armazenagem de data for "date type", pode escrever:

 C_OBJECT($o)
 C_TEXT($json)
 C_DATE($birthday)
 
 $json:="{\"name\":\"Marcus\",\"birthday\":\"2017-10-16\"}"
 $o:=JSON Parse($json)
 $birthday:=$o.birthday
  //$birthday=16/10/17

Nota: Para saber mais sobre essa configuração, veja a opção "Use date type instead of ISO date format in objects" em Página Compatibilidade.

Este exemplo mostra o uso combinado dos comandos JSON Stringify e JSON Parse:

#code4D]C_TEXT($JSONContact)
C_OBJECT($Contact;$Contact2)
$Contact:=New object("name";"Monroe";"firstname";"Alan")

// JSON Stringify: conversão de um objeto em uma string JSON
$JSONContact:=JSON Stringify($Contact)

// JSON Parse: conversão de string JSON em um novo objeto
$Contact2:=JSON Parse($JSONContact)[#/code4D]

Se quiser criar uma coleção  4D de um array JSON:

 C_COLLECTION($myCol)
 $myCol:=JSON Parse("[\"Monday\",10,\"Tuesday\",11,\"Wednesday\",12,false]")

Se quiser analisar a string abaixo e obter a posição de linha e deslocamento de linha de cada propriedade:

{
    "alpha": 4552,
    "beta": [
        {
            "echo": 45,
            "delta": "text1" 
        },
        {
            "echo": 52,
            "golf": "text2" 
        }
    ]
}

Pode escrever:

 C_OBJECT($obInfo)
 $obInfo=JSON Parse("json_string";Is object;*) //* para obter a propriedade  __symbols
  //no objeto  $obInfo retornado

O objeto $obInfo contém:

{alpha:4552,
beta:[{echo:45,delta:text1},{echo:52,golf:text2}],
__symbols:{alpha:{line:2,offset:4},
beta:{line:3,offset:4},
beta[0].echo:{line:5,offset:12},
beta[0].delta:{line:6,offset:12},
beta[1].echo:{line:9,offset:12},
beta[1].golf:{line:10,offset:12}}}



Ver também 

JSON PARSE ARRAY
JSON Stringify
JSON Validate
Tipos de campos e variáveis

 
PROPRIEDADES 

Produto: 4D
Tema: JSON
Número 1218

This command can be run in preemptive processes

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v14
Modificado: 4D v16 R4
Modificado: 4D v16 R6

 
PALAVRAS CHAVES 

JSON validator

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v20 R7)