it-swarm.com.de

Java-Implementierung von JSON in XML-Konvertierung

Gibt es bereits vorhandene JARs, die von JSON in XML konvertiert werden können?

20
dacracot

Kein Java, aber eine reine XSLT 2.0-Implementierung :

Schauen Sie sich die f:json-document() aus der FXSL 2.x-Bibliothek an.

Mit dieser Funktion ist es sehr einfach, JSon einzubinden und genauso wie ... XML zu verwenden.

Zum Beispiel kann man einfach den folgenden XPath-Ausdruck schreiben:

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

und holt alle Kinder von Students mit sex = 'Female'

Hier ist das vollständige Beispiel:

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

Wenn die obige Transformation auf ein XML-Dokument angewendet wird (ignoriert), wird das korrekte Ergebnis erzeugt :

<Smith>
   <First_Name>Mary</First_Name>
   <sex>Female</sex>
</Smith>
<Jackson>
   <First_Name>Jackie</First_Name>
   <sex>Female</sex>
</Jackson>
14

Sie können ein JSONObject erstellen und dieses dann mithilfe der XML-Klasse im Namespace org.json in XML konvertieren

Das Einwickeln des Json-Strings in das Objekt ist so einfach wie das Übergeben in den Konstruktor

JSONObject o = new JSONObject(jsonString);

Dann können Sie es mithilfe der XML-Klasse im XML-Format abrufen:

String xml = org.json.XML.toString(o);
25
juan

Eine weitere Möglichkeit: Jettison, http://jettison.codehaus.org kann Json über eine XML-Parsing-Schnittstelle (stax XMLStreamReader) verfügbar machen, die die Integration mit Systemen ermöglicht, die nur XML verstehen. Es erfordert die Verwendung einer Konvention (Badgerfish oder was auch immer das andere genannt wurde).

XStream verwendet beispielsweise Jettison (oder zumindest die Badgerfish-Konvention), um die Verwendung von JSON zu ermöglichen.

Die Frage selbst ist jedoch etwas vage: Während Sie immer von einem auf den anderen konvertieren können (dies ist wirklich eine sehr triviale Angelegenheit), sind XML und JSON nicht gleichwertig: Es gibt kein verlustfreies 1: 1-Generic-Mapping. Die Frage ist also: Was wollen Sie mit den Ergebnissen machen, wie soll das resultierende XML verwendet werden?

3
StaxMan

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

  • die obigen Punkte über keine absolut narrensichere Eins-Eins-Zuordnung sind gültig, aber ich habe gute Erfahrungen mit der Konvertierung von XML in Json unter Verwendung der obigen Bibliothek gemacht. 
2
okredo

Vielleicht möchten Sie XStream ausprobieren. Werfen Sie einen Blick auf http://x-stream.github.io/faq.html#JSON .

2
Antonio

Sie können versuchen, https://github.com/lukas-krecan/json2xml , das eine einfache Konvertierung von JSON in XML bietet. Es wird ein Jackson JSON-Parser benötigt, der SAX-Events auslöst.

1
Lukas

Conversion Box !!!

Ich verwende die JSON, die Dimitre in seiner Antwort eingefügt und in eine XML-Datei umgewandelt hat. Mal sehen, ob es für Sie funktioniert .....

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();
    }
}
}

Ausgabe:

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 kann JSON nach XML konvertieren, indem entweder XSLT mit Standardvorlagen oder die StAX-Ereignis-API https://github.com/beckchr/staxon/wiki/Converting-JSON-to-XML verwendet wird.

Hier ist ein einfaches Beispiel: 

EINGABEDATEI: 

{
    "container":[
        {
            "someString":"xxxxx",
            "someInteger":123,
            "someArrayElem":[
                {
                    "key":1111,
                    "value":"One"
                },
                {
                    "key":2222,
                    "value":"Two"
                }
            ]
        }
    ]
}

Importe + 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();

AUSGABE: 

<?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

Sie können json-lib verwenden und bietet eine bidirektionale Konvertierung.

0