Conversion de JSON en XML en Java


Je suis nouveau sur json. J'ai un programme pour générer du XML à partir d'un 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 aussi écrire mes propres sous-éléments comme .

Author: Bruno Grieder, 2013-11-14

5 answers

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érifier la Javadoc

Lien vers le le référentiel github

POM

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

message original mis à jour avec de nouveaux liens

 83
Author: Bruno Grieder, 2016-03-21 11:34:03

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

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

L'article a également un exemple de projet (y compris les fichiers jar tiers pris en charge) sous forme de fichier zip qui peut être téléchargé à des fins de référence.

 4
Author: Piyush Chordia, 2016-05-12 08:53:00

Si vous voulez remplacer n'importe quelle valeur de nœud, vous pouvez faire comme ceci

JSONObject json = new JSONObject(str);
String xml = XML.toString(json);
xml.replace("old value", "new value");
 0
Author: Saurabh, 2017-07-02 11:53:19

Transformer avec XSLT 3.0 est le seul moyen approprié de le faire, pour autant que je sache. Il est garanti de produire du XML valide, et une belle structure à cela. https://www.w3.org/TR/xslt/#json

 0
Author: Martynas Jusevičius, 2017-12-08 14:37:46

Il existe une bibliothèque underscore-java avec la méthode statique U. jsonToXml(jsonstring). Je suis le responsable du projet. Exemple en direct

Exemple de code:

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); 
    }
}
 0
Author: Valentyn Kolesnikov, 2018-10-03 21:34:16