Reputation: 1115
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 .
Upvotes: 61
Views: 271164
Reputation: 2097
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]}";
String xml = U.jsonToXmlMinimum(json);
System.out.println(xml);
}
}
Output:
<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>
Upvotes: 9
Reputation: 9598
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 https://stackoverflow.com/a/62468955/1485527 .
Upvotes: 7
Reputation: 612
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. https://www.w3.org/TR/xslt/#json
Upvotes: 0
Reputation: 508
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");
Upvotes: -2
Reputation: 1375
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: http://www.cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
The article also has a sample project (including the supporting third party jars) as a zip file which can be downloaded for reference purpose.
Upvotes: 4
Reputation: 29884
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
Upvotes: 136