it-swarm.dev

Java implementace JSON do XML konverze

Existují existující JAR k dispozici ke konverzi z JSON na XML?

20
dacracot

Není Java, ale čistá implementace XSLT 2.0 :

Podívejte se na f:json-document() z knihovny FXSL 2.x .

Pomocí této funkce je velmi snadné začlenit JSon a používat jej stejně jako ... XML.

Například stačí napsat následující výraz XPath:

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

a dostat všechny děti Students s sex = 'Female'

Zde je kompletní příklad:

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

Když je výše uvedená transformace aplikována na libovolný dokument XML (ignorován), je vytvořen správný výsledek :

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

Můžete vytvořit JSONObject , a pak jej převést na XML pomocí třídy XML ​​ v oboru názvů org.json

Zabalení řetězce json do objektu je stejně snadné jako jeho předání do konstruktoru

JSONObject o = new JSONObject(jsonString);

Pak jej můžete získat ve formátu XML pomocí třídy XML, jako je například:

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

Ještě jedna možnost: Jettison, http://jettison.codehaus.org může vystavit Json přes XML parsovací rozhraní (stax XMLStreamReader), což umožňuje integraci se systémy, které chápou pouze XML. To vyžaduje použití konvence (badgerfish, nebo co jiný byl volán).

XStream například používá Jettison (nebo přinejmenším Badgerfish konvenci) dovolit použití JSON.

Samotná otázka je však trochu nejasná: když můžete vždy převádět z jednoho na druhého (je to opravdu triviální věc, kterou je třeba dělat), XML a JSON nejsou rovnocenné: neexistuje jedno bezeztrátové generické mapování. Otázka tedy zní: co plánujete dělat s výsledky, jak se má výsledný XML používat?

3
StaxMan

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

  • výše uvedené body o naprosto neomylném mapování jsou platné, ale s výše uvedenou knihovnou jsem měl dobré zkušenosti s převodem XML na json. 
2
okredo

Můžete zkusit XStream. Podívejte se na http://x-stream.github.io/faq.html#JSON .

2
Antonio

Můžete vyzkoušet https://github.com/lukas-krecan/json2xml který poskytuje jednoduchou konverzi JSON na XML. To vyžaduje Jackson JSON analyzátor a používá jej k vysílání SAX událostí.

1
Lukas

Konverzní box !!!

Používám JSON, který Dimitre vložil do své odpovědi a přešel do XML. Podívejme se, jestli to funguje pro tebe .....

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

Výstup:

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 může konvertovat JSON na XML pomocí XSLT s výchozími šablonami nebo API události StAX https://github.com/beckchr/staxon/wiki/Converting-JSON-to-XML

Zde je jednoduchý příklad: 

VLOŽTE SOUBOR: 

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

Import + kód: 

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

VÝSTUP: 

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

Můžete použít json-lib , poskytuje obousměrnou konverzi.

0
Bhushan Bhangale