Json format to represent soap

From Zimbra :: Wiki

Jump to: navigation, search
   Article-alert.png  - This article is a community contribution and may include unsupported customizations for network edition customers.



Contents

Learn how to translate a soap request to JSON

Zimbra has a special way to represent soap xml in JSON.

Here is the documentation of how i've learned it works.

Example #1

<root>
   <name username="fernandoflorez">Fernando</name>
</root>

Translating it to json:

JSON structures always start being an object:

{}

Nodes of type 3 (element nodes) are objects:

{root: {}} -> <root />

{root: {name: {}}} -> <root><name /></root>

Object properties are changed to node attributes if they are of a type Number or String:

{root: {name: {username: "fernandoflorez"}}} -> <root><name username="fernandoflorez" /></root>

Nodes of type 1 (text nodes) are represented by the reserved "_content" parameter name:

{root: {name: {username: "fernando", _content: "Fernando"}}}

That's it for Example #1.


Example #2

<users>
    <user name="fernando"/>
    <user name="frank"/>
</users>

If an element node has different siblings of the same node name then the object is translated into an array of object:

{users: {user: [{name: "fernando"}, {name: "frank"}]}}


Example #3

<users xmlns="urn:namespace">
   <user name="fernando"/>
   <user name="frank"/>
</users>

Node namespaces are also represented by a reserved parameter name: "_jsns"

{users: {_jsns: "urn:namespace", user: [{name: "fernando"}, {name: "frank"}]}}


Just if you wonder, why all reserved parameter names start with an underscore character? Thats because underscores at the beginning of the word are not xml valid names so it's a way to avoid name conflicts.


Suggestions for improvement

There is no way to reconvert from json to xml and mantain the same data structure order. For example if we translate this json:

{users: {_jsns: "urn:namespace", user: [{name: "fernando"}, {name: "frank"}]}}

There is no way to be 100% sure it will be converted to this because of how loops in ECMA script are performed.

<users xmlns="urn:namespace">
   <user name="fernando"/>
   <user name="frank"/>
</users>

A solution for this would be to have an optional reserved parameter name "_o" that will have a zero index based value (int).

--Fernandoflorez 19:07, 22 February 2009 (UTC)


Verified Against: unknown Date Created: 2/22/2009
Article ID: http://wiki.zimbra.com/index.php?title=Json_format_to_represent_soap Date Modified: 01/27/2010
Personal tools