Using this module, you can parse JSON data into XML, manipulate it like any
other XML data using XQuery, and serialize the result back as JSON.
There are many ways to represent JSON data in XML, some loss-less ("round
tripable") and some lossy ("one way"). Loss-less representations preserve
the JSON data types boolean, number, and null; lossy
representations convert all data to strings.
For a loss-less representation, this module implements that proposed by
John Snelson.
For example:
{
"firstName" : "John",
"lastName" : "Smith",
"address" : {
"streetAddress" : "21 2nd Street",
"city" : "New York",
"state" : "NY",
"postalCode" : 10021
},
"phoneNumbers" : [ "212 732-1234", "646 123-4567" ]
}
would be represented as:
<json type="object">
<pair name="firstName" type="string">John</pair>
<pair name="lastName" type="string">Smith</pair>
<pair name="address" type="object">
<pair name="streetAddress" type="string">21 2nd Street</pair>
<pair name="city" type="string">New York</pair>
<pair name="state" type="string">NY</pair>
<pair name="postalCode" type="number">10021</pair>
</pair>
<pair name="phoneNumbers" type="array">
<item type="string">212 732-1234</item>
<item type="string">646 123-4567</item>
</pair>
</json>
For a lossy representation, this module implements
JsonML (the array form).
For example:
[ "person",
{ "created" : "2006-11-11T19:23",
"modified" : "2006-12-31T23:59" },
[ "firstName", "Robert" ],
[ "lastName", "Smith" ],
[ "address",
{ "type" : "home" },
[ "street", "12345 Sixth Ave" ],
[ "city", "Anytown" ],
[ "state", "CA" ],
[ "postalCode", "98765-4321" ]
]
]
would be represented as:
<person created="2006-11-11T19:23" modified="2006-12-31T23:59">
<firstName>Robert</firstName>
<lastName>Smith</lastName>
<address type="home">
<street>12345 Sixth Ave</street>
<city>Anytown</city>
<state>CA</state>
<postalCode>98765-4321</postalCode>
</address>
</person>