views:

4746

answers:

5

Are there existing JARs available to convert from JSON to XML?

+2  A: 

You may want to try XStream. Take a look at http://xstream.codehaus.org/faq.html#JSON.

Antonio
A: 

You can use jason-lib, it provides bidirectional conversion.

Bhushan
+5  A: 

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>
Dimitre Novatchev
Wow! Even better.
dacracot
Looks great. But I tried and f:json-document() is always returning an empty document. I posted about this in the SF.net forum: https://sourceforge.net/forum/message.php?msg_id=7385342
Alessandro Vernet
Dimitre Novatchev
+2  A: 

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?

StaxMan
A: 

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.