JSON Convert
Converts between JSON and XML. This Processor wraps Newtonsoft.Json.JsonConvert.DeserializeXmlNode
and Newtonsoft.Json.JsonConvert.SerializeXmlNode
in Json.NET
Revision History
1.0.0.0 Long, long ago, a version far away
1.1.0.1 Prevented automatic timezone conversion of date types in JSON values
Properties
Action
Type: List Input
Action to perform
JsonToXml - Convert JSON to XML
XmlToJson - Convert XML to JSON
Json
Type: Multiline Text InputOutput
If Action is JsonToXml, provide the input JSON here. If Action is XmlToJson, this property returns the converted JSON.
Xml
Type: Xml InputOutput
If Action is XmlToJson, provide the input XML here. If Action is JsonXmlTo, this property returns the converted XML.
Remarks
Use this Processor to easily convert between JSON and XML.
In XML to JSON conversion, XML attributes and namespaces will be lost.
Errors
XmlNodeConverter can only convert JSON that begins with an object.
Because XML requires a single root Node and requires a name for all nodes, the JSON passed in for conversion will need to prepared appropriately in some cases. Specifically, the entire JSON value should always be encapsulated in curly braces and all nodes should be named.
Here are some examples of invalid JSON documents:
"key" : "some string"
should be{ "key" : "some string"}
[ { "key" : 1 }, { "key" : 2 } ]
should be{ "root": [ { "key" : 1 }, { "key" : 2 } ] }
Use the Formatter Node to prepare an appropriate JSON string before passing to this Node.
Emitting Arrays
XML has no equivalent to a JSON array. However, Json.NET supports a special XML attribute to force an element to render as a JSON array:
<root xmlns:json="http://james.newtonking.com/projects/json">
<attributes json:Array="true">
<name>Item Code</name>
<position>1</position>
<visible>true</visible>
<options>
<option>1332</option>
</options>
</attributes>
<attributes json:Array="true" >
<name>Publisher</name>
<position>2</position>
<visible>true</visible>
<options>
<option>GOODS</option>
</options>
</attributes>
</root>
Non-string Types
Without an XML Schema, it is not possible to infer types for XML elements. Thus, all element values are rendered as JSON strings.
To work around this problem, wrap numeric and boolean values in an escape tag, then use the Replace Node to remove the escape sequence along with the enclosing quotes.
<root>
<field1>{{1}}</field1>
</root>
When converted to JSON, the following is returned:
{"root":{"field1":"{{1}}"}}
Use the Replace Node to replace "{{
and }}"
with an empty string.