JSON

JSON sert à faire communiquer des applications. Il est utilisé comme langage de transport de données par AJAX et les services Web. D’autres solutions sont possibles comme XML.

Content-type: application/json

Vis-à-vis de JavaScript, un document JSON représente un objet

Types

Dictionnaire
{"clé":"valeur"}
Listes
[1,2,"mon texte"]
Booléens
true
entiers et réels
3.1416
chaînes
"salut!\n"
null
[]
Dates
"2017-05-03T15:39:58.933Z"
Les doubles guillemets sont obligatoires, y compris pour la clé. On peut parcourir l'arborescence (similaire XML) avec syntaxe du genre:
obj["data"]["children"].keys()
obj["data"]["children"][0]["data"]["ups"]

APIs

Google: twitter API

https://search.twitter.com/search.json?q=Mali
http://www.reddit.com/.json
http://www.reddit.com/.xml (idem à .rss)
http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true
http://api.hostip.info/?ip=12.215.42.19 (XML)
http://api.hostip.info/get_json.php?ip=12.215.42.19&position=true

Echapper

Les doubles guillemets sont obligatoires. {"blah": ["one", 2, "th\"r\"ee"]} Retour: \\n avec python: r"\n"

Exemple

Format JSON :

{
    "menu":
    {
        "id": "file",
        "value": "File",
        "popup":
        {
            "menuitem":
            [
                { "value": "New", "onclick": "CreateNewDoc()" },
                { "value": "Open", "onclick": "OpenDoc()" },
                { "value": "Close", "onclick": "CloseDoc()" }
            ]
        }
    }
}


À titre de comparaison, le même exemple en XML :

 <menu id="file" value="File">
   <popup>
     <menuitem value="New" onclick="CreateNewDoc()" />
     <menuitem value="Open" onclick="OpenDoc()" />
     <menuitem value="Close" onclick="CloseDoc()" />
   </popup>
 </menu>

Evaluation

En JavaScript, il est simple (mais risqué) d’évaluer une expression JSON pour la transformer en objet natif : var donnees = eval('('+donnees_json+')')

Version sûre: var donnees = typeof JSON !='undefined' ? JSON.parse(donnees_json) : eval('('+donnees_json+')');

Transformation en chaîne

parse et stringify à utiliser en conjonction avec localStorage pour stocker objets.

Les dates sont stockées sous forme de chaînes. Les méthodes (fonctions internes) doivent aussi être converties en chaîne pour être sauvées.

localStorage.setItem('monObjet', JSON.stringify(monObjet));
var objRestauré = JSON.parse(localStorage.getItem('monObjet'));

var jsonDate = (new Date()).toJSON()
var maChaine=JSON.stringify(obj,null,'\t') //code JSON indenté
stringify peut servir aussi à filtrer les attributs à inclure.
Son deuxième paramètre: tableau avec les clés à retenir. Ça peut aussi être une fonction remplacer(clé,valeur) si on retourne valeur undefined la clé n'est pas incluse.
function remplaçant(clé, valeur) {
  if (typeof valeur === "string") {
    return undefined;
  }
  return valeur;
}
console.log(JSON.stringify(toto, remplaçant)); //vire champs textes