XML vs JSON



XML


Les règles du jeu XML


Elles sont extrêmement simples. Les informations doivent être :

DB2 reconnaît les champs de type XML

commençons par la création d'une table avec le type de champs XML, tel que donné par la documentation

CREATE SCHEMA POSAMPLE;
SET CURRENT SCHEMA POSAMPLE;
CREATE TABLE CUSTOMER ( CID BIGINT NOT NULL PRIMARY KEY , INFO XML ) ;

Les champs de type XML peuvent faire jusqu'à 2 Go, la totalité d'une ligne ne peut pas dépasser 3,5 Go.

Ils sont stockés dans le CCSID indiqué par SQL_XML_DATA_CCSID dans QAQQINI, UTF-8 (1208) par défaut.

 

Puis insertion de données, le parsing (la conversion CHAR -> XML) est automatique lors des insertions,
mais vous pouvez parser de manière explicite avec XMLPARSE() pour utiliser des options (voir cette fonction)

INSERT INTO Customer (Cid, Info) VALUES (1000,        
'<customerinfo xmlns="http://posample.org" Cid="1000">
<name>Kathy Smith</name>
<addr country="Canada">
<street>5 Rosewood</street>
<city>Toronto</city>
<prov-state>Ontario</prov-state>
<pcode-zip>M6W 1E6</pcode-zip>
</addr>
<phone type="work">416-555-1358</phone>
</customerinfo>') INSERT INTO Customer (Cid, Info) VALUES (1002,
'<customerinfo xmlns="http://posample.org" Cid="1002">
<name>Jim Noodle</name>
<addr country="Canada">
<street>25 EastCreek</street>
<city>Markham</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N9C 3T6</pcode-zip>
</addr>
<phone type="work">905-555-7258</phone>
</customerinfo>') INSERT INTO Customer (Cid, Info) VALUES (1003,
'<customerinfo xmlns="http://posample.org" Cid="1003">
<name>Robert Shoemaker</name>
<addr country="Canada">
<street>1596 Baseline</street>
<city>Aurora</city>
<prov-state>Ontario</prov-state>
<pcode-zip>N8X 7F8</pcode-zip>
</addr>
<phone type="work">905-555-2937</phone>
</customerinfo>')

Mais aussi (voir la fonction GET_XML_FILE ici):

INSERT INTO POSAMPLE/CUSTOMER   
 VALUES( 1004 , GET_XML_FILE('/temp/client04.xml') )



XML_TABLE permet de parser un flux XML

SELECT X.NOM, X.RUE, X.VILLE  FROM Customer,
XMLTABLE ('$c/customerinfo' passing INFO as "c"
COLUMNS
NOM CHAR(30) PATH 'name',
RUE VARCHAR(25) PATH 'addr/street',
VILLE VARCHAR(25) PATH 'addr/city' )
AS X

Affiche

....+....1....+....2....+....3....+....4....+....5....+....6....+....7 NOM RUE VILLE Kathy Smith 5 Rosewood Toronto Jim Noodle 1150 Maple Drive Newtown Robert Shoemaker 1596 Baseline Aurora ******** Fin de données ********

JSON


Aujourd'hui JSON est de plus en plus utilisé.

JSON (JavaScript Object Notation) est un format de données textuelles dérivé de la notation des objets du langage JavaScript (Wikipedia)

 

ce qui s'écrit comme cela en XML   s'écrit comme cela en JSON
<producteurs>
  <producteur>
    <numero>45</numero>
   <commune>Reims</commune>
    <appellation>13</appellation>
  </producteur>
</producteurs>
->

{
   "producteurs":  {
       "producteur": {
            "numero":45,
            "commune":"Reims",
            "appellation":13    
       }
    }
}


D'ailleurs vous trouverez ici deux fonctions bien pratiques XML2JSON et JSON2XML écrites en Java.

Un élément peut contenir un objet, une valeur ou un tableau de valeurs, marqué alors par [ et ]

<PO>
 <id>103</id>
<orderDate>2014-06-20</orderDate>
<customer>
<cid>888</cid>
</customer> <items>
<item>
<partNum>872-AA</partNum>
<shipDate>2014-06-21</shipDate>
<productName>Lawnmower</productName>
<USPrice>749.99</USPrice>
<quantity>1</quantity>
</item>
<item>
<partNum>837-CM</partNum>
<productName>Digital Camera</productName>
<USPrice>199.99</USPrice>
<quantity>2</quantity>
<comment>2014-06-22</comment>
</item>
</items>
</PO>

devient (remarquez le tableau de "item")

{
 "PO":{
 "id": 103, 
 "orderDate": "2014-06-20", 
 "customer": {"@cid": 888}, 
 "items": { 
   "item": [
             { "partNum": "872-AA", 
               "productName": "Lawnmower", 
               "quantity": 1, 
               "USPrice": 749.99, 
               "shipDate": "2014-06-21" 
             }, 
             { "partNum": "837-CM", 
               "productName": "Digital Camera", 
               "quantity": 2, 
               "USPrice": 199.99, 
               "comment": "2014-06-22" 
             } 
          ] 
        } 
    }
}

résumé des caractères spéciaux :


Il y a trois manières d'utiliser JSON sur IBM i :


Les Technology Refresh 1 (7.3) et 5 (7.2) apportent une nouvelle fonction JSON_TABLE (dans QSYS2)
   
JSON_TABLE(
JSON_SOURCE
JSON_PATH

COLUMNS nom type PATH 'json_path', ... ) as X

Copyright © 2018 VOLUBIS