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 .
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
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.
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");
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
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);
}
}