Modifié par Julien EYMERY le 2017/06/06 14:22

Masquer les derniers auteurs
Julien EYMERY 1.1 1 {{hardis-info title="Informations obsolètes à partir de la V13 PTF05" type="warning" icon="true"}}
2 Depuis la V13 PTF05, l'ordre CONV_DONNEES intégré à Adélia permet directement de convertir du JSON en XML et réciproquement, rendant cette fiche obsolète.
3 {{/hardis-info}}
4
5
6
7
8
9 Le format JSON n'est pas directement supporté par Adélia Web.
10 (((
11 == Manipulation coté serveur d'application ==
12 )))
13
14 La seule solution est d'utiliser une bibliothèque externe dont les fonctions seraient appelées via l'ordre APPELER_CLASS.
15
16 A partir de la version 11 d'Adélia Studio, une bibliothèque de classes Java (json.jar) a été introduite pour des besoins internes. Cette bibliothèque se trouve dans le sous-répertoire WEB-INF\lib de chaque application Web générée par Adélia Web.
17
18 Le but de ce document est de montrer un exemple d'intégration d'une bibliothèque pour la manipulation d'objets JSON.
19 Une explication du format JSON se trouve ici : [[http://www.json.org/>>url:http://www.json.org/]].
20
21 La bibliothèque Java json.jar est téléchargeable ici : [[http://www.json.org/java/json.zip>>url:http://www.json.org/java/json.zip]]
22 L'aide en ligne de cette bibliothèque se trouve ici : [[http://www.json.org/java/index.html>>url:http://www.json.org/java/index.html]]
23
24 Cette bibliothèque offre une gestion complète du format JSON (via des méthodes Java). Afin de simplifier l'exemple, nous allons nous intéresser à une des fonctionnalités offertes permettant la conversion JSON <-> XML. Le but étant de manipuler un objet JSON à partir de son équivalent sous la forme d'un document XML; celui-ci pouvant être manipulé directement en Adélia à l'aide des ordres XML (Le support des ordres XML doit se faire en cochant "Intégration XML" lors de la mise à jour du site Web).
25
26 Lors de la conversion d'un document XML au format JSON, les éléments suivants ne sont pas pris en compte :
27 * le prologue XML,
28
29 * les commentaires,
30
31 * la déclaration du doctype.
32
33
34
35 On définit une bibliothèque d'interface entre Adélia et la bibliothèque json.jar :
36
37 [[sampleXMLJSONConverter.class>>attach:sampleXMLJSONConverter.class]]
38
39 [[sampleXMLJSONConverter.java>>attach:sampleXMLJSONConverter.java]]
40
41
42 Cette nouvelle bibliothèque offre les méthodes suivantes :
43
44 - **XMLStringtoJSONString** : Conversion d'un document XML sous la forme d'une chaîne alphanumérique en objet JSON équivalent sous la forme d'une chaîne alphanumérique
45
46 Les paramètres :
47 ALPHA(...) xmlDoc : document XML à convertir,
48 ALPHA(...) jsonDoc : chaîne alphanumérique devant recevoir le résultat de la conversion,
49 NUM_BIN_4 lgJSONDoc : Nombre de caractères défini lors de la déclaration de jsonDoc,
50 NUM_BIN_2 codeRet : Code retour de l'opération. Les valeurs possibles sont :
51 0 : ok,
52 -1 : la taille max de la chaîne alphanumérique devant recevoir le résultat est insuffisante,
53 -2 : erreur lors de la conversion.
54
55 Exemple :
56
57
58
59 {{code language="none"}}
60 alpha(3000) xml_string
61 alpha(2000) json_string
62 xml_idf docXML
63 num_bin_2 codeRet
64 * Creation d'un document XML
65 * <?xml version="1.0" encoding="ISO-8859-1"?>
66 * <racine>
67 * <fils1>paul</fils1>
68 * <fils2>robert</fils2>
69 * </racine>
70 xml_ouvrir docXML *ecriture *var_doc(xml_string) *encodage_fic('ISO-8859-1')
71 xml_creer_noeud docXML *fils 'racine'
72 xml_creer_noeud docXML *fils 'fils1'
73 xml_creer_val docXML 'paul'
74 xml_creer_noeud docXML *FRERE 'fils2'
75 xml_creer_val docXML 'robert'
76 xml_fermer docXML
77 appeler_class 'sampleXMLJSONConverter' 'XMLStringtoJSONString' xml_string json_string 2000 codeRet
78 * Le resultat de la conversion dans json_string est :
79 * {"racine":{"fils1":"paul","fils2":"robert"}}
80 {{/code}}
81
82
83
84 - **XMLBlobtoJSONString** : Conversion d'un document XML sous la forme d'un blob en objet JSON équivalent sous la forme d'une chaîne alphanumérique
85
86 Les paramètres :
87 IMAGE xmlDoc : document XML sous à forme d'un blob à convertir,
88 ALPHA(...) encoding : encodage utilisé lors de la création du document XML
89 ALPHA(...) jsonDoc : chaîne alphanumérique devant recevoir le résultat de la conversion,
90 NUM_BIN_4 lgJSONDoc : Nombre de caractères défini lors de la déclaration de jsonDoc,
91 NUM_BIN_2 codeRet : Code retour de l'opération. Les valeurs possibles sont :
92 0 : ok,
93 -1 : la taille max de la chaîne alphanumérique devant recevoir le résultat est insuffisante,
94 -2 : erreur lors de la conversion,
95 -3 : l'encodage utilisé lors de la création du document XML n'est pas supporté.
96
97
98 Exemple :
99
100
101
102 {{code language="none"}}
103 image xml_blob
104 alpha(2000) json_string
105 xml_idf docXML
106 num_bin_2 codeRet
107 * Creation d'un document XML
108 * <?xml version="1.0" encoding="ISO-8859-1"?>
109 * <racine>
110 * <fils1>paul</fils1>
111 * <fils2>robert</fils2>
112 * </racine>
113 xml_ouvrir docXML *ecriture *var_doc(xml_blob) *encodage_fic('ISO-8859-1')
114 xml_creer_noeud docXML *fils 'racine'
115 xml_creer_noeud docXML *fils 'fils1'
116 xml_creer_val docXML 'paul'
117 xml_creer_noeud docXML *FRERE 'fils2'
118 xml_creer_val docXML 'robert'
119 xml_fermer docXML
120 appeler_class 'sampleXMLJSONConverter' 'XMLBlobtoJSONString' xml_blob 'ISO-8859-1' json_string 2000 codeRet
121 * Le resultat de la conversion dans json_string est :
122 * {"racine":{"fils1":"paul","fils2":"robert"}}
123 {{/code}}
124
125
126
127
128 - **JSONStringtoXMLString** : Conversion d'un objet JSON sous la forme d'une chaîne alphanumérique en document XML équivalent sous la forme d'une chaîne alphanumérique
129
130 Les paramètres :
131 ALPHA(...) jsonlDoc : objet JSON à convertir,
132 ALPHA(...) xmlDoc : chaîne alphanumérique devant recevoir le résultat de la conversion,
133 NUM_BIN_4 lgXmlDoc : Nombre de caractères défini lors de la déclaration de xmlDoc,
134 NUM_BIN_2 codeRet : Code retour de l'opération. Les valeurs possibles sont :
135 0 : ok,
136 -1 : la taille max de la chaîne alphanumérique devant recevoir le résultat est insuffisante,
137 -2 : erreur lors de la conversion,
138 -3 : la syntaxe du document JSON est invalide
139
140 Exemple :
141
142
143
144 {{code language="none"}}
145 alpha(3000) xml_string
146 alpha(2000) json_string
147 num_bin_2 codeRet
148 * Creation de l'objet JSON
149 * {"menu": {
150 * "id": "file",
151 * "value": "File",
152 * "popup": {
153 * "menuitem": [
154 * {"value": "New", "onclick": "CreateNewDoc()"},
155 * {"value": "Open", "onclick": "OpenDoc()"},
156 * {"value": "Close", "onclick": "CloseDoc()"}
157 * ]
158 * }
159 * }}
160 json_string = '{"menu": {"id": "file","value": "File","popup": {"menuitem": [{"value": "New", "onclick": "CreateNewDoc()"},{"value": "Open", "onclick": "OpenDoc()"},{"value": "Close", "onclick": "CloseDoc()"}]}}}'
161 appeler_class 'sampleXMLJSONConverter' 'JSONStringtoXMLString' json_string xml_string 3000 codeRet
162 * Le resultat de la conversion dans xml_string est :
163 * <?xml version="1.0" encoding="UTF-8"?>
164 * <menu>
165 * <value>File</value>
166 * <id>file</id>
167 * <popup>
168 * <menuitem><value>New</value><onclick>CreateNewDoc()</onclick></menuitem>
169 * <menuitem><value>Open</value><onclick>OpenDoc()</onclick></menuitem>
170 * <menuitem><value>Close</value><onclick>CloseDoc()</onclick></menuitem>
171 * </popup>
172 * </menu>
173 {{/code}}
174
175
176
177
178 - **JSONStringtoXMLBlob** : Conversion d'un objet JSON sous la forme d'une chaîne alphanumérique en document XML équivalent sous la forme d'un blob
179
180 Les paramètres :
181 ALPHA(...) jsonlDoc : objet JSON à convertir,
182 IMAGE xmlDoc : Blob devant recevoir le résultat de la conversion,
183 ALPHA(...) encoding : encodage utilisé pour la création du document XML sous la forme d'un blob
184 NUM_BIN_2 codeRet : Code retour de l'opération. Les valeurs possibles sont :
185 0 : ok,
186 -1 : erreur lors de la conversion,
187 -2 : La syntaxe du document JSON est invalide,
188 -3 : l'encodage utilisé pour la création du document XML n'est pas supporté.
189
190 Exemple :
191
192
193
194 {{code language="none"}}
195 image xml_blob
196 alpha(2000) json_string
197 num_bin_2 codeRet
198 * Creation de l'objet JSON
199 * {"menu": {
200 * "id": "file",
201 * "value": "File",
202 * "popup": {
203 * "menuitem": [
204 * {"value": "New", "onclick": "CreateNewDoc()"},
205 * {"value": "Open", "onclick": "OpenDoc()"},
206 * {"value": "Close", "onclick": "CloseDoc()"}
207 * ]
208 * }
209 * }}
210 json_string = '{"menu": {"id": "file","value": "File","popup": {"menuitem": [{"value": "New", "onclick": "CreateNewDoc()"},{"value": "Open", "onclick": "OpenDoc()"},{"value": "Close", "onclick": "CloseDoc()"}]}}}'
211 appeler_class 'sampleXMLJSONConverter' 'JSONStringtoXMLBlob' json_string xml_blob 'ISO-8859-1' codeRet
212 * Le resultat de la conversion dans xml_blob est :
213 * <?xml version="1.0" encoding="ISO-8859-1"?>
214 * <menu>
215 * <value>File</value>
216 * <id>file</id>
217 * <popup>
218 * <menuitem><value>New</value><onclick>CreateNewDoc()</onclick></menuitem>
219 * <menuitem><value>Open</value><onclick>OpenDoc()</onclick></menuitem>
220 * <menuitem><value>Close</value><onclick>CloseDoc()</onclick></menuitem>
221 * </popup>
222 * </menu>
223 {{/code}}
224
225
226 (((
227 == Manipulation coté navigateur ==
228 )))
229
230 JSON est supporté nativement par les navigateurs récents :
231
232 IE 8 avec une page Web en mode IE 8 (<meta http-equiv~="X-UA-Compatible" content~="IE~=8" /> dans le <head>),
233 Google Chrome 6
234 Opera 10.62
235 Firefox 3.6
236
237 L'objet window.JSON offre 2 méthodes :
238 window.JSON.parse : conversion d'une chaîne alphanumérique au format JSON en objet Javascript,
239 window.JSON.stringify : conversion un objet JavaScript en chaîne alphanumérique du format JSON
240
241 Quelques pointeurs :
242
243 [[http://msdn.microsoft.com/en-us/library/bb299886.aspx>>url:http://msdn.microsoft.com/en-us/library/bb299886.aspx]]
244 [[https://developer.mozilla.org/En/Using_native_JSON>>url:https://developer.mozilla.org/En/Using_native_JSON]]
245 [[http://msdn.microsoft.com/en-us/library/cc836458(VS.85).aspx>>url:http://msdn.microsoft.com/en-us/library/cc836458(VS.85).aspx]]
246
247 Pour un support multi-navigateurs, l'utilisation d'une bibliothèque JavaScript est nécessaire.
248 Voir par exemple : [[http://www.json.org/js.html>>url:http://www.json.org/js.html]]
249
250
251 Note : En Adelia, la taille maximum d'une variable ALPHA est 32767 caractères. Donc, pour palier à cette limite on pourrait créer une fonction XMLBlobtoJSONBlob.
252 (((
253 ==
254 Articles connexes ==
255 )))
256
257 Les articles connexes apparaissent ici en fonction des étiquettes que vous avez sélectionnées. Cliquez pour modifier la macro et ajouter ou modifier des étiquettes.
258
259 {{liveData sort="doc.date:desc" source="liveTable" properties="doc.title,doc.date,doc.author" description="Recently updated" limit="5" filters="tag=web" sourceParameters="translationPrefix=platform.index."}}{{/liveData}}
260
261