5 Data encoding ToC Previous Next

5.4 OPC UA JSON ToC Previous Next

5.4.2 Built-in Types ToC Previous Next

5.4.2.1 General ToC

Any value for a Built-In type that is NULL shall be encoded as the JSON literal ‘null’ if the value is an element of an array. If the NULL value is a field within a Structure or Union, the field shall not be encoded.

5.4.2.2 Boolean ToC

A Boolean value shall be encoded as the JSON literal ‘true’ or ‘false’.

5.4.2.3 Integer ToC

Integer values other than Int64 and UInt64 shall be encoded as a JSON number.

Int64 and UInt64 values shall be formatted as a decimal number encoded as a JSON string

(See the XML encoding of 64-bit values described in 5.3.1.3).

5.4.2.4 Floating point ToC

Normal Float and Double values shall be encoded as a JSON number.

Special floating-point numbers such as positive infinity (INF), negative infinity (-INF) and not-a-number (NaN) shall be represented by the values “Infinity”, “-Infinity” and “NaN” encoded as a JSON string. See 5.2.2.3 for more information on the different types of special floating-point numbers.

5.4.2.5 String ToC

String values shall be encoded as JSON strings.

Any characters which are not allowed in JSON strings are escaped using the rules defined in RFC 7159.

5.4.2.6 DateTime ToC

DateTime values shall be formatted as specified by ISO 8601:2004 and encoded as a JSON string.

DateTime values which exceed the minimum or maximum values supported on a platform shall be encoded as “0001-01-01T00:00:00Z” or “9999-12-31T23:59:59Z” respectively. During decoding, these values shall be converted to the minimum or maximum values supported on the platform.

DateTime values equal to “0001-01-01T00:00:00Z” are considered to be NULL values.

5.4.2.7 Guid ToC

Guid values shall be formatted as described in 5.1.3 and encoded as a JSON string.

5.4.2.8 ByteString ToC

ByteString values shall be formatted as a Base64 text and encoded as a JSON string.

Any characters which are not allowed in JSON strings are escaped using the rules defined in RFC 7159.

5.4.2.9 XmlElement ToC

XmlElement value shall be encoded as a String as described in 5.4.2.5.

5.4.2.10 NodeId ToC

NodeId values shall be encoded as a JSON object with the fields defined in Table 23.

The abstract NodeId structure is defined in OPC 10000-3 and has three fields Identifier, IdentifierType and NamespaceIndex. The representation these abstract fields are described in the table.

Table 23 – JSON Object Definition for a NodeId

Name Description
IdType The IdentifierType encoded as a JSON number.
Allowed values are:
   0 - UInt32 Identifier encoded as a JSON number.
   1 - A String Identifier encoded as a JSON string.
   2 - A Guid Identifier encoded as described in 5.4.2.7.
   3 - A ByteString Identifier encoded as described in 5.4.2.8.
   This field is omitted for UInt32 identifiers.
Id The Identifier.
The value of the id field specifies the encoding of this field.
Namespace The NamespaceIndex for the NodeId.
The field is encoded as a JSON number for the reversible encoding.
The field is omitted if the NamespaceIndex equals 0.
For the non-reversible encoding, the field is the NamespaceUri associated with the NamespaceIndex, encoded as a JSON string.
A NamespaceIndex of 1 is always encoded as a JSON number.

5.4.2.11 ExpandedNodeId ToC

ExpandedNodeId values shall be encoded as a JSON object with the fields defined in Table 24.

The abstract ExpandedNodeId structure is defined in OPC 10000-3 and has five fields Identifier, IdentifierType, NamespaceIndex, NamespaceUri and ServerIndex. The representation of these abstract fields are described in the table.

Table 24 – JSON Object Definition for an ExpandedNodeId

Name Description
IdType The IdentifierType encoded as a JSON number.
Allowed values are:
   0 - UInt32 Identifier encoded as a JSON number.
   1 - A String Identifier encoded as a JSON string.
   2 - A Guid Identifier encoded as described in 5.4.2.7.
   3 - A ByteString Identifier encoded as described in 5.4.2.8.
   This field is omitted for UInt32 identifiers.
Id The Identifier.
The value of the ‘t’ field specifies the encoding of this field.
Namespace The NamespaceIndex or the NamespaceUri for the ExpandedNodeId.
If the NamespaceUri is not specified, the NamespaceIndex is encoded with these rules:
   The field is encoded as a JSON number for the reversible encoding.
   The field is omitted if the NamespaceIndex equals 0.
   For the non-reversible encoding the field is the NamespaceUri associated with the NamespaceIndex encoded as a JSON string.
   A NamespaceIndex of 1 is always encoded as a JSON number.
If the NamespaceUri is specified it is encoded as a JSON string in this field.
ServerUri The ServerIndex for the ExpandedNodeId.
This field is encoded as a JSON number for the reversible encoding.
This field is omitted if the ServerIndex equals 0.
For the non-reversible encoding, this field is the ServerUri associated with the ServerIndex portion of the ExpandedNodeId, encoded as a JSON string.

5.4.2.12 StatusCode ToC

StatusCode values shall be encoded as a JSON number for the reversible encoding.

For the non-reversible form, StatusCode values shall be encoded as a JSON object with the fields defined in Table 25.

Table 25 – JSON Object Definition for a StatusCode

Name Description
Code The numeric code encoded as a JSON number.
The Code is omitted if the numeric code is 0 (Good).
Symbol The string literal associated with the numeric code encoded as JSON string.
e.g. 0x80AB0000 has the associated literal “BadInvalidArgument”.
The Symbol is omitted if the numeric code is 0 (Good).

A StatusCode of Good (0) is treated like a NULL and not encoded. If it is an element of an JSON array it is encoded as the JSON literal ‘null’.

5.4.2.13 DiagnosticInfo ToC

DiagnosticInfo values shall be encoded as a JSON object with the fields shown in Table 26.

Table 26 – JSON Object Definition for a DiagnosticInfo

Name Data Type Description
SymbolicId Int32 A symbolic name for the status code.
NamespaceUri Int32 A namespace that qualifies the symbolic id.
Locale Int32 The locale used for the localized text.
LocalizedText Int32 A human readable summary of the status code.
AdditionalInfo String Detailed application specific diagnostic information.
InnerStatusCode StatusCode A status code provided by an underlying system.
InnerDiagnosticInfo DiagnosticInfo Diagnostic info associated with the inner status code.

Each field is encoded using the rules defined for the built-in type specfied in the Data Type column.

The SymbolicId, NamespaceUri, Locale and LocalizedText fields are encoded as JSON numbers which reference the StringTable contained in the ResponseHeader.

5.4.2.14 QualifiedName ToC

QualifiedName values shall be encoded as a JSON object with the fields shown in Table 27.

The abstract QualifiedName structure is defined in OPC 10000-3 and has two fields Name and NamespaceIndex. The NamespaceIndex is represented by the Uri field in the JSON object.

Table 27 – JSON Object Definition for a QualifiedName

Name Description
Name The Name component of the QualifiedName.
Uri The NamespaceIndex component of the QualifiedName encoded as a JSON number.
The Uri field is omitted if the NamespaceIndex equals 0.
For the non-reversible form, the NamespaceUri associated with the NamespaceIndex portion of the QualifiedName is encoded as JSON string unless the NamespaceIndex is 1 or if NamespaceUri is unknown. In these cases, the NamespaceIndex is encoded as a JSON number.

5.4.2.15 LocalizedText ToC

LocalizedText values shall be encoded as a JSON object with the fields shown in Table 28.

The abstract LocalizedText structure is defined in OPC 10000-3 and has two fields Text and Locale.

Table 28 – JSON Object Definition for a LocalizedText

Name Description
Locale The Locale portion of LocalizedText values shall be encoded as a JSON string
Text The Text portion of LocalizedText values shall be encoded as a JSON string.

For the non-reversible form, LocalizedText value shall be encoded as a JSON string containing the Text component.

5.4.2.16 ExtensionObject ToC

ExtensionObject values shall be encoded as a JSON object with the fields shown in Table 29.

Table 29 – JSON Object Definition for a ExtensionObject

Name Description
TypeId The NodeId of a DataTypeEncoding Node formatted using the rules in 5.4.2.10.
Encoding The format of the Body field encoded as a JSON number.
This value is 0 if the body is Structure encoded as a JSON object (see 5.4.6).
This value is 1 if the body is a ByteString value encoded as a JSON string (see 5.4.2.8).
This value is 2 if the body is a XmlElement value encoded as a JSON string (see 5.4.2.9).
This field is omitted if the value is 0.
Body Body   of the ExtensionObject. The type of this field is specified by the Encoding field.
If the Body is empty, the ExtensionObject is NULL and is omitted or encoded as a JSON null.

For the non-reversible form, ExtensionObject values shall be encoded as a JSON object containing only the value of the Body field. The TypeId and Encoding fields are dropped.

5.4.2.17 Variant ToC

Variant values shall be encoded as a JSON object with the fields shown in Table 30.

Table 30 – JSON Object Definition for a Variant

Name Description
Type The Built-in type for the value contained in the Body (see Table 1) encoded as JSON number.
If type is 0 (NULL) the Variant contains a NULL value and the containing JSON object shall be omitted or replaced by the JSON literal ‘null’ (when an element of a JSON array).
Body If the value is a scalar it is encoded using the rules for type specified for the Type.
If the value is a one-dimensional array it is encoded as JSON array (see 5.4.5).
Multi-dimensional arrays are encoded as a one dimensional JSON array which is reconstructed using the value of the Dimensions field (see 5.2.2.16).
Dimensions The dimensions of the array encoded as an JSON array of JSON numbers.
The Dimensions are omitted for scalar and one-dimensional array values.

For the non-reversible form, Variant values shall be encoded as a JSON object containing only the value of the Body field. The Type and Dimensions fields are dropped. Multi-dimensional arrays are encoded as a multi dimensional JSON array as described in 5.4.5.

5.4.2.18 DataValue ToC

DataValue values shall be encoded as a JSON object with the fields shown in Table 31.

Table 31 – JSON Object Definition for a DataValue

Name Data Type Description
Value Variant The value.
Status StatusCode The status associated with the value.
SourceTimestamp DateTime The source timestamp associated with the value.
SourcePicoSeconds UInt16 The number of 10 picosecond intervals for the SourceTimestamp.
ServerTimestamp DateTime The Server timestamp associated with the value.
ServerPicoSeconds UInt16 The number of 10 picosecond intervals for the ServerTimestamp.

If a field has a null or default value it is omitted. Each field is encoded using the rules defined for the built-in type specfied in the Data Type column.

Previous Next