web-dev-qa-db-fra.com

Conversion de JSON en XML en Java

Je suis nouveau à JSON. Je vais avoir un programme pour générer XML à partir d'objet JSON. 

String str = "{'name':'JSON','integer':1,'double':2.0,'boolean':true,'nested':{'id':42},'array':[1,2,3]}";  
    JSON json = JSONSerializer.toJSON( str );  
    XMLSerializer xmlSerializer = new XMLSerializer();  
    xmlSerializer.setTypeHintsCompatibility( false );  
    String xml = xmlSerializer.write( json );  
    System.out.println(xml); 

la sortie est:

<?xml version="1.0" encoding="UTF-8"?>
<o><array json_class="array"><e json_type="number">1</e><e json_type="number">2</e><e json_type="number">3</e></array><boolean json_type="boolean">true</boolean><double json_type="number">2.0</double><integer json_type="number">1</integer><name json_type="string">JSON</name><nested json_class="object"><id json_type="number">42</id></nested></o>

mon plus gros problème est de savoir comment écrire mes propres attributs au lieu de json_type = "number" et écrire aussi mes propres sous-éléments tels que. 

44
vinod

Utilisez la (excellente) bibliothèque JSON-Java de json.org puis

JSONObject json = new JSONObject(str);
String xml = XML.toString(json);

toString peut prendre un deuxième argument pour fournir le nom du nœud racine XML.

Cette bibliothèque est également capable de convertir XML en JSON en utilisant XML.toJSONObject(Java.lang.String string)

Vérifiez le Javadoc

Lien vers le répertoire the github

POM

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160212</version>
</dependency>

message original mis à jour avec de nouveaux liens

87
Bruno Grieder

Si vous avez un fichier dtd valide pour le fichier xml, vous pouvez facilement transformer json en xml et xml en json en utilisant le fichier binaire jl eclipselink.

Reportez-vous à ceci: http://www.cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html

L'article contient également un exemple de projet (y compris les fichiers jars tiers associés) en tant que fichier Zip pouvant être téléchargé à des fins de référence.

4
Piyush Chordia

Il y a underscore-Java library avec la méthode statique U.jsonToXml (jsonstring). Je suis le mainteneur du projet. Exemple live

import com.github.underscore.lodash.U;

public class MyClass {
    public static void main(String args[]) {
        String json = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}";  
        System.out.println(json); 
        String xml = U.jsonToXml(json);  
        System.out.println(xml); 
    }
}

Sortie:

{"name":"JSON","integer":1,"double":2.0,"boolean":true,"nested":{"id":42},"array":[1,2,3]}
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name>JSON</name>
  <integer number="true">1</integer>
  <double number="true">2.0</double>
  <boolean boolean="true">true</boolean>
  <nested>
    <id number="true">42</id>
  </nested>
  <array number="true">1</array>
  <array number="true">2</array>
  <array number="true">3</array>
</root>
0

La transformation avec XSLT 3.0 est la seule façon de le faire, pour autant que je sache. Il est garanti qu’il produira du code XML valide et une structure de Nice. ... https://www.w3.org/TR/xslt/#json

0

Si vous voulez remplacer une valeur de noeud, vous pouvez faire comme ceci

JSONObject json = new JSONObject(str);
String xml = XML.toString(json);
xml.replace("old value", "new value");
0
Saurabh