Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v20 R7
JSON Parse

JSON Parse 


 

JSON Parse ( chaîneJSON {; type}{; *} ) -> Résultat 
Paramètre Type   Description
chaîneJSON  Chaîne in Chaîne en JSON à analyser
type  Entier long in Type dans lequel convertir les valeurs
Opérateur in Ajouter la ligne et la position de chaque propriété si la valeur retournée est un objet
Résultat  Objet, Varié in Valeurs extraites de la chaîne JSON

La commande JSON Parse analyse (parse) le contenu d’une chaîne formatée en JSON et en extrait des valeurs que vous pouvez stocker dans un champ ou une variable 4D. Cette commande désérialise des données JSON ; elle effectue l’action inverse de la commande JSON Stringify.

Passez dans chaîneJSON la chaîne au format JSON dont vous souhaitez analyser le contenu. Cette chaîne doit être correctement formatée, sinon une erreur de parsing est générée. JSON Parse peut donc être utilisée pour valider du JSON. 

Note : Si vous utilisez des pointeurs, vous devez appeler la commande JSON Stringify avant JSON Parse.

Par défaut, si vous omettez le paramètre type, 4D tentera de convertir la valeur obtenue dans le type de la variable ou du champ utilisé pour stocker le résultat (s’il est défini). Sinon, 4D tentera de déduire le type. Vous pouvez également forcer l’interprétation du type en passant le paramètre type : passez une des constantes suivantes du thème Types champs et variables :

Constante Type Valeur
Is Boolean Entier long 6
Is collection Entier long 42
Is date Entier long 4
Is longint Entier long 9
Is object Entier long 38
Is real Entier long 1
Is text Entier long 2
Is time Entier long 11

Notes :

  • Les valeurs de type numérique doivent être incluses dans l'intervalle ±10.421e±10
  • Dans les valeurs de type texte, tous les caractères spéciaux doivent être échappés, y compris les guillemets (cf. exemples)
  • Par défaut lorsque vous utilisez la constante Is date, la commande considère que la chaîne date contient une heure locale et non GMT. Vous pouvez modifier ce fonctionnement à l'aide du sélecteur Dates inside objects de la commande [#cmd id="642"/].
  • A compter de 4D v16 R6, si le paramétrage courant de stockage des dates "type date", les chaînes date JSON au format "YYYY-MM-DD" sont automatiquement retournées sous forme de valeurs de type date par la commande JSON Parse. Pour plus d'informations sur ce paramétrage, veuillez vous reporter à l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans la Page Compatibilité.
  • Une valeur de type heure peut être retournée à partir d'un nombre dans une chaîne. Par défaut, 4D considère que la valeur est un nombre de secondes.

Si vous passez le paramètre optionnel * et si le paramètre chaîneJSON représente un objet, l'objet retourné contiend une propriété supplémentaire nommée __symbols qui fournit le chemin, l'emplacement de la ligne et la position dans la ligne de chaque propriété et sous-propriété de l'objet. Cette information est utile pour le débogage. La structure de la propriété __symbols est la suivante :

__symbols:{//description de l'objet
   myAtt.mySubAtt...:{ //chemin de la propriété
      line:10, //numéro de la ligne de la propriété
      offset:35 //position de la propriété à partir du début de la ligne
      }
   }

Note : Le paramètre * est ignoré si la valeur retournée n'est pas de type objet.

Exemples de conversions simples :

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

Exemples de conversions de données de type date : 

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

Si le paramétrage courant de stockage de date est "type date", vous pouvez écrire :

 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

Note : Pour plus d'informations sur ce paramétrage, reportez-vous à l'option "Utiliser le type date au lieu du format date ISO dans les objets" dans le Page Compatibilité.

Cet exemple montre l’utilisation conjointe des commandes JSON Stringify et JSON Parse :

 C_TEXT($JSONContact)
 C_OBJECT($Contact;$Contact2)
 $Contact:=New object("name";"Monroe";"firstname";"Alan")
 
  // JSON Stringify : conversion d’un objet JSON en chaîne JSON
 $JSONContact:=JSON Stringify($Contact)
 
  // JSON Parse : conversion d’une chaîne JSON en nouvel objet
 $Contact2:=JSON Parse($JSONContact)

Vous souhaitez créer une collection 4D à partir d'un tableau JSON :

 C_COLLECTION($myCol)
 $myCol:=JSON Parse("[\"Lundi\",10,\"Mardi\",11,\"Mercredi\",12,false]")

Vous souhaitez analyser la chaîne suivante et obtenir le chemin et la position de chaque propriété :

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

Vous pouvez écrire :

 C_OBJECT($obInfo)
 $obInfo=JSON Parse("json_string";Is object;*) //* pour ajouter la propriété __symbols
  //dans l'objet $obInfo retourné

L'objet $obInfo contient :

{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}}}



Voir aussi  

JSON PARSE ARRAY
JSON Stringify
JSON Validate
Types champs et variables

 
PROPRIÉTÉS 

Produit : 4D
Thème : JSON
Numéro : 1218

Commande(s) éligible(s) à l'exécution dans un process préemptif

 
PAGE CONTENTS 
 
HISTORIQUE 

Créé : 4D v14
Modifié : 4D v16 R4
Modifié : 4D v16 R6

 
MOTS-CLÉS 

JSON validator

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v20 R7)