JSON - Exemples
| JSON = class static (Object) | Interface de JSON | Exemples de JSON |
var j, k : JSONVariant;
j := JSON.Parse('{"hello":["world"]}');
// Création d'un objet JSON
k:=JSON.NewObject;
k.Test1:='';
k.Test1:='AA'; // Si on redéfinit un même nom, cela remplace sa valeur
k.Test2:='BB';
j['Prop 1']:=k; // On affecte cet objet à une nouvelle propriété (qui contient un espace)
// Création d'un tableau JSON
k:=JSON.NewArray;
k[0]:='';
k[0]:='A'; // Si on redéfinit un même élément, cela remplace sa valeur
k[1]:='B';
j.Prop2:=k; // On affecte ce tableau à une nouvelle propriété
PrintLn(JSON.Stringify(j)); // renvoie {"hello":["world"],"Prop 1":{"Test1":"AA","Test2":"BB"},"Prop2":["A","B"]}
j := JSON.Parse('{"hello":["world"]}');
// Création d'un objet JSON
k:=JSON.NewObject;
k.Test1:='';
k.Test1:='AA'; // Si on redéfinit un même nom, cela remplace sa valeur
k.Test2:='BB';
j['Prop 1']:=k; // On affecte cet objet à une nouvelle propriété (qui contient un espace)
// Création d'un tableau JSON
k:=JSON.NewArray;
k[0]:='';
k[0]:='A'; // Si on redéfinit un même élément, cela remplace sa valeur
k[1]:='B';
j.Prop2:=k; // On affecte ce tableau à une nouvelle propriété
PrintLn(JSON.Stringify(j)); // renvoie {"hello":["world"],"Prop 1":{"Test1":"AA","Test2":"BB"},"Prop2":["A","B"]}
// Exemple de .Clone()
var a:=JSON.Parse('[1,2,3]');
var b:=a;
var c:=a.Clone();
a[1]:='toto';
PrintLn(JSON.Stringify(a)); // Les variables a et b pointent vers le même objet
PrintLn(JSON.Stringify(b)); // => quand on modifie a, b est modifié
PrintLn(JSON.Stringify(c)); // Par contre, c est un clone => non modifié car indépendant de a
var a:=JSON.Parse('[1,2,3]');
var b:=a;
var c:=a.Clone();
a[1]:='toto';
PrintLn(JSON.Stringify(a)); // Les variables a et b pointent vers le même objet
PrintLn(JSON.Stringify(b)); // => quand on modifie a, b est modifié
PrintLn(JSON.Stringify(c)); // Par contre, c est un clone => non modifié car indépendant de a
// Exemple de .Extend()
var A:=JSON.Parse('{ "toto" : "titi", "tutu" : "tata" }');
var B:=JSON.Parse('{ "toto" : "tete", "tyty" : "tytytyty" }');
A.Extend(B); // On étend A avec les champs présents dans B
PrintLn(JSON.Stringify(a)); // {"toto":"tete","tutu":"tata","tyty":"tytytyty"}
// le champ "toto" existant dans A a été remplacé par celui de B
var A:=JSON.Parse('{ "toto" : "titi", "tutu" : "tata" }');
var B:=JSON.Parse('{ "toto" : "tete", "tyty" : "tytytyty" }');
A.Extend(B); // On étend A avec les champs présents dans B
PrintLn(JSON.Stringify(a)); // {"toto":"tete","tutu":"tata","tyty":"tytytyty"}
// le champ "toto" existant dans A a été remplacé par celui de B
// Exemples de .Low() .High() .Length()
var A:=JSON.Parse('[100,200,300]');
PrintLn(A.Low()); // 0
PrintLn(A.High()); // 2
PrintLn(A.Length()); // 3
var B:=JSON.Parse('{"toto":"tete","tutu":"tata","tyty":"tytytyty"}');
PrintLn(B.Low()); // 0
PrintLn(B.High()); // 2
PrintLn(B.Length()); // 3
var A:=JSON.Parse('[100,200,300]');
PrintLn(A.Low()); // 0
PrintLn(A.High()); // 2
PrintLn(A.Length()); // 3
var B:=JSON.Parse('{"toto":"tete","tutu":"tata","tyty":"tytytyty"}');
PrintLn(B.Low()); // 0
PrintLn(B.High()); // 2
PrintLn(B.Length()); // 3
// Exemples de .TypeName()
var a:=JSON.Parse('{ "toto" : "titi", "tutu" : "tata" }');
var b:=JSON.Parse('[4,5,6,7]');
PrintLn(a.TypeName()); // Object
PrintLn(b.TypeName()); // Array
var a:=JSON.Parse('{ "toto" : "titi", "tutu" : "tata" }');
var b:=JSON.Parse('[4,5,6,7]');
PrintLn(a.TypeName()); // Object
PrintLn(b.TypeName()); // Array
// Exemples de .ElementName()
var a:=JSON.Parse('{ "toto" : "titi", "tutu" : "tata" }');
PrintLn(a.ElementName(-1)); // chaîne vide
PrintLn(a.ElementName(0)); // toto
PrintLn(a.ElementName(1)); // tutu
PrintLn(a.ElementName(2)); // chaîne vide
var b:=JSON.Parse('[4,7]');
PrintLn(b.ElementName(-1)); // chaîne vide
PrintLn(b.ElementName(0)); // 0 (pour un Array, le ElementName est l'index de la valeur)
PrintLn(b.ElementName(1)); // 1
PrintLn(b.ElementName(2)); // chaîne vide
var a:=JSON.Parse('{ "toto" : "titi", "tutu" : "tata" }');
PrintLn(a.ElementName(-1)); // chaîne vide
PrintLn(a.ElementName(0)); // toto
PrintLn(a.ElementName(1)); // tutu
PrintLn(a.ElementName(2)); // chaîne vide
var b:=JSON.Parse('[4,7]');
PrintLn(b.ElementName(-1)); // chaîne vide
PrintLn(b.ElementName(0)); // 0 (pour un Array, le ElementName est l'index de la valeur)
PrintLn(b.ElementName(1)); // 1
PrintLn(b.ElementName(2)); // chaîne vide
//exemple de .Add(élément d'un JSONArray)
var tab:=JSON.NewArray;
var tabNew:=JSON.NewArray;
for var i:=0 to 2 do begin
var obj:=JSON.NewObject;
obj.prop:='SN'+IntToStr(i);
tab.Add(obj);
end;
tabNew.Add(tab[0]);
print(JSON.Stringify(tab)); //renvoie[{"prop":"SN1"},{"prop":"SN2"}] :l'élement tab[0] a été déplacé et non copié
print(JSON.Stringify(tabNew)); //renvoie : [{"prop":"SN0"}]
var tab:=JSON.NewArray;
var tabNew:=JSON.NewArray;
for var i:=0 to 2 do begin
var obj:=JSON.NewObject;
obj.prop:='SN'+IntToStr(i);
tab.Add(obj);
end;
tabNew.Add(tab[0]);
print(JSON.Stringify(tab)); //renvoie[{"prop":"SN1"},{"prop":"SN2"}] :l'élement tab[0] a été déplacé et non copié
print(JSON.Stringify(tabNew)); //renvoie : [{"prop":"SN0"}]
//démonstration du single-ownership
var jsTest:=JSON.NewObject;
jsTest.a := 1;
var js1:=JSON.NewArray;
js1.Add(jsTest);
js1.Add('toto');
PrintLn(js1); // js1 = [{"a":1},"toto"]
js1.Add(jsTest); // => jsTest est réaffecté dans js1, ce qui supprime l'entrée précédente de js1
PrintLn(js1); // js1 = ["toto",{"a":1}]
var js2:=JSON.NewObject;
js2.Test1 := jsTest; // => jsTest est réaffecté dans js2, ce qui supprime l'entrée correspondante de js1
PrintLn(js1); // js1 = ["toto"]
PrintLn(js2); // js2 = {"Test1":{"a":1}}
js2.Test2 := jsTest; // => jsTest est réaffecté dans js2, ce qui supprime la propriété précédente de js2
PrintLn(js2); // js2 = {"Test2":{"a":1}}
var jsTest:=JSON.NewObject;
jsTest.a := 1;
var js1:=JSON.NewArray;
js1.Add(jsTest);
js1.Add('toto');
PrintLn(js1); // js1 = [{"a":1},"toto"]
js1.Add(jsTest); // => jsTest est réaffecté dans js1, ce qui supprime l'entrée précédente de js1
PrintLn(js1); // js1 = ["toto",{"a":1}]
var js2:=JSON.NewObject;
js2.Test1 := jsTest; // => jsTest est réaffecté dans js2, ce qui supprime l'entrée correspondante de js1
PrintLn(js1); // js1 = ["toto"]
PrintLn(js2); // js2 = {"Test1":{"a":1}}
js2.Test2 := jsTest; // => jsTest est réaffecté dans js2, ce qui supprime la propriété précédente de js2
PrintLn(js2); // js2 = {"Test2":{"a":1}}