This tool allows a seamless conversion from XML/JSON to JSON/XML without the need of XSD (XML Schema).
- conversion from XML to JSON is always doable
- conversion from JSON to XML is doable, but JSON file must be organized in a defined structured way (readable by the tool, see below)
This tool also presents an API that can be used by external Java programs to get an internal representation of XML/JSON data document in input, to allow their elaboration. It's also possible to write out the extracted elaborated data to an output document.
This particular use allows to convert an input XML/JSON file to the respective JSON/XML document.
To convert specify the input file (.xml, .railml, .json) and then specify the output file.
Example:
java -jar XMLJSONConverter input-file.xml output-file.jsonThe tool presents a library that can be used by Java programs to extract XML/JSON data into Java objects. It is also possible to write out elaborated obects to an XML/JSON file.
You can add the jar file to your Java project to use the library. The package that you should use is it.unifi.API. Inside you have the following classes:
-
ObjElement: this class defines the base type used by the library. Every ObjElement has aname, avalue, anattributesList, anamespacesList, aelementsList.The structure followed is the same of an XML element as you can see. In particular
elementsListcontains the children of the actual ObjElement. -
ObjAttribute: defines anameand avaluefor an attribute. -
ObjNamespace: defines aprefix(nullif the namespace is default) and theURIof the namespace.
All these classes defines getters and setters.
Conversion is the actual class that allows to extract XML or JSON data from a document to a root ObjElement. The XMLToInternal and JSONToInternal methods returns an ObjElement that contains its attributes and namespaces, and also it contains a list of its children ObjElements. You can see that this structure is recursive because every ObjElement contains its children ObjElements each with their namespaces, attributes and children elements.
The returned root ObjElement can thus be used to traverse other elements and manipulate their values. Once the manipulation is done you can also write out all the elements into an output file with InternalToJSON or InternalToXML methods that take as parameters the root ObjElement and the output file path.
While every well-formed XML file in input is supported, that's not the case for JSON, because JSON data structure is not as rigid as XML, so to convert from JSON to XML is necessary to follow the following format for JSON data:
{
"root": "root_value",
"namespaces": [
{"prefix_1": "URI"},
...
],
"attributes": [
{"attribute_1": "attribute_value"},
...
],
"elements": [
{
"child_element_1": "child_value"
},
...
]
}You can see that the JSON document is divided recursively in 4 sections:
"element_name": "value"This part define an element and its value (if it has no value, putnullas value). The element with his value will be converted in XML as it is. [This is the only mandatory section, the other 3 sections are optional]"namespaces":[...]. This part will define a list of namespaces for the element in this scope. Every namespace is represented here as an object (i.e. in curly braces).- as said, every element in this list is an object that represent a namespace, with
"prefix":"URI". If you want to define the XML default namespace (iexmlns), you must set"":"URI", so thatprefixis an empty string. [This section is optional]
- as said, every element in this list is an object that represent a namespace, with
"attributes":[...]. This part will define a list of attributes for the element in this scope. Every attribute here is represented as an object (i.e. in curly braces). [This section is optional]"elements":[...]. This part is the recursive part. Here will be defined the children elements of the actual element, in the way the previous section already described.[This section is optional]
The tool is one of the fastest in its category. The tool successfully converted 1GB XML file into a JSON file in 1.20m. With these large files you should modify Java -Xms parameter to allow an higher consumption of RAM. For this particular test 8G of RAM (Java Heap size) has been set:
java -Xmx8G -jar XMLJSONConverter input-file.xml output-file.json- mixed content is not supported:
- XML elements cannot be mixed (
mixed=trueschemas not supported) - JSON (due to XML conversion) cannot have more than one plain
"property":valuefield per object. But it can contain other elements as a list with other single field"property":value
- XML elements cannot be mixed (
- every json value is treated and forced to be a String, that because XML treats every value as a text-element and the tool is not informed about the XML schema.
- So when converting from XML to JSON, every JSON value will be converted as a String
- JSON values in input are not required to be String in Json
element_namevalue (non String value for value innamespacesandattributesare not valid)

