Implémentation Java de la conversion JSON en XML [fermé]


Fermé.Cette question ne répond pas aux directives Stack Overflow. Il n'accepte pas actuellement de réponses.

Vous voulez améliorer cette question? Mettre à jour le question donc c'est sur le sujet pour le débordement de pile.

Fermé il y a 3 ans.

Améliorer cette question

Existe-t-il des fichiers JAR existants disponibles pour convertir JSON en XML?

Author: dacracot, 2009-02-18

9 answers

Pas un Java, mais une implémentation XSLT 2.0 pure :

Ont un look à la f:json-document() à partir de la FXSL 2.x de la bibliothèque.

En utilisant cette fonction, il est extrêmement facile d'incorporer JSon et de l'utiliser de la même manière... XML.

Par exemple, on peut simplement écrire l'expression XPath suivante:

f:json-document($vstrParam)/Students/*[sex = 'Female']

Et scolariser 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>

Quand le la transformation ci-dessus est appliquée sur n'importe quel document XML (ignoré), le résultat correct est produit :

<Smith>
   <First_Name>Mary</First_Name>
   <sex>Female</sex>
</Smith>
<Jackson>
   <First_Name>Jackie</First_Name>
   <sex>Female</sex>
</Jackson>
 14
Author: Dimitre Novatchev, 2009-02-18 14:46:54

Vous pouvez créer un JSONObject, puis le convertir en XML en utilisant la classe XML dans l'organisation.espace de noms json

Envelopper la chaîne json dans l'objet est aussi facile 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 ceci:

String xml = org.json.XML.toString(o);
 26
Author: juan, 2017-03-07 16:12:08

Une autre possibilité: Jettison, http://jettison.codehaus.org peut exposer Json via l'interface d'analyse XML (stax XMLStreamReader), ce qui permet l'intégration avec des systèmes qui ne comprennent que XML. Il nécessite l'utilisation d'une convention (blaireau, ou tout ce que l'autre a été appelé).

XStream, par exemple, utilise Jettison (ou au moins la convention Badgerfish) pour permettre l'utilisation de JSON.

, Mais la question elle-même est un peu vague: alors que vous pouvez toujours convertir de l'un à l'autre (c'est une chose très triviale à faire vraiment), XML et JSON ne sont pas équivalents: il n'y a pas de mappage générique sans perte un à un. Par conséquent, la question est: que prévoyez-vous de faire avec les résultats, comment le xml résultant doit-il être utilisé?

 3
Author: StaxMan, 2009-02-24 20:45:37

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

  • les points ci-dessus sur aucun mappage un-un complètement infaillible sont valides, mais j'ai eu une bonne expérience avec la conversion de xml en json en utilisant la bibliothèque ci-dessus.
 2
Author: okredo, 2010-04-06 20:45:14

Vous pouvez essayer XStream. Jetez un oeil à http://x-stream.github.io/faq.html#JSON.

 2
Author: Antonio, 2016-08-27 19:38:35

Vous pouvez essayer https://github.com/lukas-krecan/json2xml qui fournit une conversion JSON en XML simple. Il prend l'analyseur Jackson JSON et l'utilise pour émettre des événements SAX.

 1
Author: Lukas, 2012-01-15 07:50:12

Boîte de Conversion!!!

J'utilise le JSON que Dimitre a collé dans sa réponse et j'ai 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
Author: Dominic Gomes, 2015-07-08 16:59:58

StAXON peut convertir JSON en XML en utilisant XSLT avec des modèles par défaut ou StAX event API 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
Author: Mark, 2012-05-31 16:06:29

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

 0
Author: Bhushan Bhangale, 2013-02-25 23:09:22