Java implementation of JSON to XML conversion
Solution 1
Not a Java, but a pure XSLT 2.0 implementation:
Have a look at the f:json-document()
from the FXSL 2.x library.
Using this function it is extremely easy to incorporate JSon and use it just as... XML.
For example, one can just write the following XPath expression:
f:json-document($vstrParam)/Students/*[sex = 'Female']
and get all children of Students
with sex = 'Female'
Here is the complete example:
<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>
When the above transformation is applied on any XML document (ignored), the correct result is produced:
<Smith>
<First_Name>Mary</First_Name>
<sex>Female</sex>
</Smith>
<Jackson>
<First_Name>Jackie</First_Name>
<sex>Female</sex>
</Jackson>
Solution 2
You can create a JSONObject, and then convert it to XML using the XML class in the org.json namespace
Wrapping the json string in the object is as easy as passing it in its constructor
JSONObject o = new JSONObject(jsonString);
Then you can get it in XML format using the XML class, like so:
String xml = org.json.XML.toString(o);
Solution 3
One more possibility: Jettison, http://jettison.codehaus.org can expose Json via XML parsing interface (stax XMLStreamReader), which allows integration with systems that only understand XML. It requires use of a convention (badgerfish, or whatever the other one was called).
XStream, for example, uses Jettison (or at least Badgerfish convention) to allow use of JSON.
But the question itself is bit vague: while you can always convert from one to the othe (it is a very trivial thing to do really), XML and JSON are not equivalent: there is no one-to-one lossless generic mapping. Hence, the question is: what are you planning to do with results, how is resulting xml to be used?
Solution 4
You may want to try XStream. Take a look at http://x-stream.github.io/faq.html#JSON.
Solution 5
http://json-lib.sourceforge.net/
- the points above about no completely foolproof one-one mapping are valid, but I have had a good experience with converting xml to json using the above library.
Comments
-
dacracot almost 4 years
Are there existing JARs available to convert from JSON to XML?
-
avernet about 15 yearsLooks great. But I tried and f:json-document() is always returning an empty document. I posted about this in the SF.net forum: sourceforge.net/forum/message.php?msg_id=7385342
-
Dimitre Novatchev about 15 yearsThere is an example how to use this fuction. It is the testFunc-json-document.xsl file in the Tests folder: fxsl.cvs.sourceforge.net/viewvc/fxsl/fxsl-xslt2/Tests/… When applied on any XML file (not used) this transformation produces the correct result. One potential factor that could cause your problem is the use of relatively old version of Saxon -- please use a 9.x version of Saxon. Also, the link in your message is unreachable.
-
Jon over 11 yearsThat is amazingly simple, thank you!
-
Ankit Srivastava over 10 yearsCan you please elaborate??i mean do i have to use external jars?eclipse won't recognize these commands
-
Browny Lin over 10 yearsYou can try this: mvnrepository.com/artifact/org.codeartisans/org.json/20130603
-
Abel Callejo over 10 years@AnkitSrivastava, the source java files for the classes JSONObject & XML can be downloaded from github.com/douglascrockford/JSON-java (json.org/java). You still have to make the jar yourself though. But if you're working with Google App Engine, the classes JSONObject & XML can be found in
com.google.appengine.labs.repackaged.org.json.*
-
Paras Singh over 6 yearsJSONObject jsonObject = new JSONObject(json.toString())...This line throws an error saying "no suitable constructor found for JSONObject(String)"