web-dev-qa-db-fra.com

Implémentation Java de la conversion JSON en XML

Existe-t-il des fichiers JAR disponibles pour la conversion de JSON en XML?

20
dacracot

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>
14
Dimitre Novatchev

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);
25
juan

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?

3
StaxMan

http://json-lib.sourceforge.net/

  • les points ci-dessus concernant le mappage one-one absolument infaillible sont valables, mais j'ai eu une bonne expérience de la conversion de xml en json à l'aide de la bibliothèque ci-dessus. 
2
okredo

Vous voudrez peut-être essayer XStream. Jetez un coup d’œil à http://x-stream.github.io/faq.html#JSON .

2
Antonio

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.

1
Lukas

Boîte de conversion !!!

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>
1
Dominic Gomes

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>
0
Mark

Vous pouvez utiliser json-lib , il fournit une conversion bidirectionnelle.

0
Bhushan Bhangale