Existe-t-il des fichiers JAR disponibles pour la conversion de JSON en XML?
Pas un Java, mais une implémentation pure de XSLT 2.0 :
Jetez un coup d’œil à la f:json-document()
de la bibliothèque FXSL 2.x .
En utilisant cette fonction, il est extrêmement facile d'incorporer JSon et de l'utiliser comme ... XML.
Par exemple, il suffit d'écrire l'expression XPath suivante:
f:json-document($vstrParam)/Students/*[sex = 'Female']
et obtient tous les enfants de Students
avec sex = 'Female'
Voici l'exemple complet:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f xs"
>
<xsl:import href="../f/func-json-document.xsl"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vstrParam" as="xs:string">
{
"teacher":{
"name":
"Mr Borat",
"age":
"35",
"Nationality":
"Kazakhstan"
},
"Class":{
"Semester":
"Summer",
"Room":
null,
"Subject":
"Politics",
"Notes":
"We're happy, you happy?"
},
"Students":
{
"Smith":
{"First Name":"Mary","sex":"Female"},
"Brown":
{"First Name":"John","sex":"Male"},
"Jackson":
{"First Name":"Jackie","sex":"Female"}
}
,
"Grades":
{
"Test":
[
{"grade":"A","points":68,"grade":"B","points":25,"grade":"C","points":15},
{"grade":"C","points":2, "grade":"B","points":29, "grade":"A","points":55},
{"grade":"C","points":2, "grade":"A","points":72, "grade":"A","points":65}
]
}
}
</xsl:variable>
<xsl:template match="/">
<xsl:sequence select=
"f:json-document($vstrParam)/Students/*[sex = 'Female']"/>
</xsl:template>
</xsl:stylesheet>
Lorsque la transformation ci-dessus est appliquée à un document XML (ignoré), le résultat correct est généré :
<Smith>
<First_Name>Mary</First_Name>
<sex>Female</sex>
</Smith>
<Jackson>
<First_Name>Jackie</First_Name>
<sex>Female</sex>
</Jackson>
Vous pouvez créer un JSONObject , puis le convertir en XML à l'aide de la classe XML dans l'espace de noms org.json
Envelopper la chaîne json dans l'objet est aussi simple que de la passer dans son constructeur
JSONObject o = new JSONObject(jsonString);
Ensuite, vous pouvez l'obtenir au format XML en utilisant la classe XML, comme suit:
String xml = org.json.XML.toString(o);
Une autre possibilité: Jettison, http://jettison.codehaus.org peut exposer Json via une interface d’analyse XML (stax XMLStreamReader), qui permet une intégration avec des systèmes ne comprenant que le XML. Il nécessite l’utilisation d’une convention (badgerfish, ou quel que soit le nom de l’autre).
XStream, par exemple, utilise Jettison (ou au moins la convention de Badgerfish) pour autoriser l’utilisation de JSON.
Mais la question elle-même est un peu vague: bien que vous puissiez toujours passer de l’un à l’autre (c’est vraiment une chose très triviale à faire), XML et JSON ne sont pas équivalents: il n’existe pas de mappage générique sans perte. .____.] La question est donc la suivante: que comptez-vous faire avec les résultats, comment utiliser les résultats xml qui en résultent?
http://json-lib.sourceforge.net/
Vous voudrez peut-être essayer XStream. Jetez un coup d’œil à http://x-stream.github.io/faq.html#JSON .
Vous pouvez essayer https://github.com/lukas-krecan/json2xml qui fournit une conversion simple JSON vers XML. Il prend l’analyseur JSON de Jackson et l’utilise pour émettre des événements SAX.
J'utilise le JSON que Dimitre a collé dans sa réponse et qui a été converti en XML. Permet de voir si cela fonctionne pour vous .....
import org.json.me.JSONObject;
import cjm.component.cb.xml.ToXML;
public class Test
{
public static void main(String[] args)
{
try
{
JSONObject objectJSON = new JSONObject();
objectJSON.put("ROOT", (new JSONObject("{\"teacher\":{\"name\":\"Mr Borat\",\"age\":\"35\",\"Nationality\":\"Kazakhstan\"},\"Class\":{\"Semester\":\"Summer\",\"Room\":null,\"Subject\":\"Politics\",\"Notes\":\"We're happy, you happy?\"},\"Students\":{\"Smith\":{\"FirstName\":\"Mary\",\"sex\":\"Female\"},\"Brown\":{\"FirstName\":\"John\",\"sex\":\"Male\"},\"Jackson\":{\"FirstName\":\"Jackie\",\"sex\":\"Female\"}},\"Grades\":{\"Test\":[{\"grade\":\"A\",\"points\":68,\"grade\":\"B\",\"points\":25,\"grade\":\"C\",\"points\":15},{\"grade\":\"C\",\"points\":2,\"grade\":\"B\",\"points\":29,\"grade\":\"A\",\"points\":55},{\"grade\":\"C\",\"points\":2,\"grade\":\"A\",\"points\":72,\"grade\":\"A\",\"points\":65}]}}")));
System.out.println("JSON: " + objectJSON);
StringBuilder xml = new ToXML().convertToXML(objectJSON, true); // Conversion Box!!!!
System.out.println("XML: " + xml);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Sortie:
JSON: {"ROOT":{"Students":{"Brown":{"FirstName":"John","sex":"Male"},"Jackson":{"FirstName":"Jackie","sex":"Female"},"Smith":{"FirstName":"Mary","sex":"Female"}},"Class":{"Subject":"Politics","Room":null,"Semester":"Summer","Notes":"We're happy, you happy?"},"Grades":{"Test":[{"points":15,"grade":"C"},{"points":55,"grade":"A"},{"points":65,"grade":"A"}]},"teacher":{"age":"35","name":"Mr Borat","Nationality":"Kazakhstan"}}}
-------- JSON Detected --------
-------- XML created Successfully --------
XML: <ROOT><Students><Brown><FirstName>John</FirstName><sex>Male</sex></Brown><Jackson><FirstName>Jackie</FirstName><sex>Female</sex></Jackson><Smith><FirstName>Mary</FirstName><sex>Female</sex></Smith></Students><Class><Subject>Politics</Subject><Room>null</Room><Semester>Summer</Semester><Notes>We're happy, you happy?</Notes></Class><Grades><Test><LIST_ELEMENT_Test><points>15</points><grade>C</grade></LIST_ELEMENT_Test><LIST_ELEMENT_Test><points>55</points><grade>A</grade></LIST_ELEMENT_Test><LIST_ELEMENT_Test><points>65</points><grade>A</grade></LIST_ELEMENT_Test></Test></Grades><teacher><age>35</age><name>Mr Borat</name><Nationality>Kazakhstan</Nationality></teacher></ROOT>
StAXON peut convertir JSON en XML à l'aide de XSLT avec des modèles par défaut ou de l'API d'événements StAX https://github.com/beckchr/staxon/wiki/Converting-JSON-to-XML
Voici un exemple simple:
FICHIER D'ENTRÉE:
{
"container":[
{
"someString":"xxxxx",
"someInteger":123,
"someArrayElem":[
{
"key":1111,
"value":"One"
},
{
"key":2222,
"value":"Two"
}
]
}
]
}
Importations + code:
import de.odysseus.staxon.json.JsonXMLConfig;
import de.odysseus.staxon.json.JsonXMLConfigBuilder;
import de.odysseus.staxon.json.JsonXMLInputFactory;
import de.odysseus.staxon.xml.util.PrettyXMLEventWriter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import Java.io.StringWriter;
StringWriter stringWriter = new StringWriter();
JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).prettyPrint(false).build();
XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(getClass().getClassLoader().getResourceAsStream("input.json"));
XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(stringWriter);
writer = new PrettyXMLEventWriter(writer);
writer.add(reader);
String xml = stringWriter.getBuffer().toString();
SORTIE:
<?xml version="1.0" encoding="UTF-8"?>
<container>
<someString>xxxxx</someString>
<someInteger>123</someInteger>
<someArrayElem>
<key>1111</key>
<value>One</value>
</someArrayElem>
<someArrayElem>
<key>2222</key>
<value>Two</value>
</someArrayElem>
</container>
Vous pouvez utiliser json-lib , il fournit une conversion bidirectionnelle.