5.4.6 Structures

Structures shall be encoded as JSON objects.

Note that JSON objects are unordered sets of name-value pairs. The order specified by the DataTypeDefinition is not preserved when a Structure is serialized in JSON.

Fields which are NULL or have a default value shall be encoded using the rules shown in Table 45.

Table 45 – JSON Encoding Rules for Structures
Field ValueCompactVerbose
NULLOmittedJSON null
Default ValueOmittedDefault Value

For example, instances of the structures:

	struct Type2 
	{ 
	   Int32 A; 
	   Int32 B; 
	   Char* C;
	}; 
	
	struct Type1 
	{ 
	   Int32 X; 
	   Int32 NoOfY; 
	   Type2* Y; 
	   Int32 Z; 
	};

The CompactEncoding is represented in JSON as:

	{
	   "X":1234,
	   "Y":[ { "A":1, "B":2, "C":"Hello" }, { "A":3, "B":4 } ],
	   "Z":5678
	}

Where "C" is omitted from the second Type2 instance because it has a NULL value.

The VerboseEncoding is represented in JSON as:

	{
	   "X":1234,
	   "Y":[ { "A":1, "B":2, "C":"Hello" }, { "A":3, "B":4, "C":null } ],
	   "Z":5678
	}

Where "C" in the second Type2 instance has a JSON null value.

Code generators should ensure that the special field names (UaType, UaTypeId and EncodingMask) are not permitted in Structures.