Converting JSON to XML in Java

I am new to json. I am having a program to generate xml from json object.

String str = "{'name':'JSON','integer':1,'double':2.0,'boolean':true,'nested':{'id':42},'array':[1,2,3]}"; JSON json = JSONSerializer.toJSON( str ); XMLSerializer xmlSerializer = new XMLSerializer(); xmlSerializer.setTypeHintsCompatibility( false ); String xml = xmlSerializer.write( json ); System.out.println(xml); 

the output is:

<?xml version="1.0" encoding="UTF-8"?> <o><array json_class="array"><e json_type="number">1</e><e json_type="number">2</e><e json_type="number">3</e></array><boolean json_type="boolean">true</boolean><double json_type="number">2.0</double><integer json_type="number">1</integer><name json_type="string">JSON</name><nested json_class="object"><id json_type="number">42</id></nested></o> 

my biggest problem is how to write my own attributes instead of json_type="number" and also writing my own sub elements like .

2

6 Answers

Use the (excellent) JSON-Java library from json.org then

JSONObject json = new JSONObject(str); String xml = XML.toString(json); 

toString can take a second argument to provide the name of the XML root node.

This library is also able to convert XML to JSON using XML.toJSONObject(java.lang.String string)

Check the Javadoc

Link to the the github repository

POM

<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160212</version> </dependency> 

original post updated with new links

13

Underscore-java library has static method U.jsonToXml(jsonstring). Live example

import com.github.underscore.U; public class MyClass { public static void main(String args[]) { String json = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}"; System.out.println(json); String xml = U.jsonToXml(json); System.out.println(xml); } } 

Output:

{"name":"JSON","integer":1,"double":2.0,"boolean":true,"nested":{"id":42},"array":[1,2,3]} <?xml version="1.0" encoding="UTF-8"?> <root> <name>JSON</name> <integer number="true">1</integer> <double number="true">2.0</double> <boolean boolean="true">true</boolean> <nested> <id number="true">42</id> </nested> <array number="true">1</array> <array number="true">2</array> <array number="true">3</array> </root> 
3

For json to xml use the following Jackson example:

final String str = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}"; ObjectMapper jsonMapper = new ObjectMapper(); JsonNode node = jsonMapper.readValue(str, JsonNode.class); XmlMapper xmlMapper = new XmlMapper(); xmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true); xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_1_1, true); ObjectWriter ow = xmlMapper.writer().withRootName("root"); StringWriter w = new StringWriter(); ow.writeValue(w, node); System.out.println(w.toString()); 

Prints:

<?xml version='1.1' encoding='UTF-8'?> <root> <name>JSON</name> <integer>1</integer> <double>2.0</double> <boolean>true</boolean> <nested> <id>42</id> </nested> <array>1</array> <array>2</array> <array>3</array> </root> 

To convert it back (xml to json) take a look at this answer .

2

If you have a valid dtd file for the xml then you can easily transform json to xml and xml to json using the eclipselink jar binary.

Refer this:

The article also has a sample project (including the supporting third party jars) as a zip file which can be downloaded for reference purpose.

Transforming with XSLT 3.0 is the only proper way to do it, as far as I can tell. It is guaranteed to produce valid XML, and a nice structure at that.

1

If you want to replace any node value you can do like this

JSONObject json = new JSONObject(str); String xml = XML.toString(json); xml.replace("old value", "new value"); 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like