Glossary · Data

Reversible JSON encoding

In OPC UA, reversible JSON encoding is the JSON form that keeps full type information, so a decoder can reconstruct the original Variant, NodeId and structure exactly. Values appear as objects carrying an explicit built-in type id alongside the body, which makes payloads larger but round-trippable and safe for machine-to-machine use.

What reversible means in practice

A Variant is written as an object with a Type member holding the built-in type id and a Body member holding the value, so a Double 42.5 is distinguishable from an Int32 42 and from the string 42.5. NodeIds keep their identifier type and namespace, LocalizedText keeps its locale, and structures keep their type identifier. Because nothing is inferred, a decoder can rebuild the original data without consulting the address space.

The omitted-Good rule

One economy applies even in the reversible form: a StatusCode of Good is numerically zero and is omitted, per the Part 6 encoding rules. An absent StatusCode member therefore means Good, not missing. Consumers that map absence to null quality will mislabel every healthy value, and consumers that require the field to be present will reject well-formed messages. This is the single most common JSON integration bug.

Reversible, compact and verbose

The naming has moved on. Alongside reversible and non-reversible, the 1.05 generation of the specification defines Compact and Verbose JSON variants, and the tooling reflects that: OPC Publisher exposes reversible, non-reversible, compact and verbose as four distinct encoding options. If you are specifying an interface, name the exact encoding option of the exact product version rather than saying only JSON, and pin it in the interface document.

When to choose it

Choose reversible whenever another OPC UA implementation, a PubSub subscriber or a schema-validating consumer is on the other end, and whenever data will be re-published into another OPC UA server. Choose non-reversible only for a human-facing dashboard or a schemaless time-series sink that is genuinely happy with bare numbers. Reversible payloads are noticeably larger, which is why UADP exists for the deterministic and bandwidth-sensitive cases.

Example

The same DataValue in reversible form - the Type member is what makes it round-trippable

{
  "Value": { "Type": 11, "Body": 42.5 },
  "SourceTimestamp": "2026-09-07T08:14:22.1230000Z"
}

// Type 11 = Double. A StatusCode of Good (0) is omitted entirely.
The mistake people make: Assuming any JSON out of an OPC UA product is reversible. Gateways default differently, and once a non-reversible payload has been written to a broker or a database the type information is gone and cannot be recovered from the data itself.

Defined in: Part 6 - Mappings, JSON encoding.

Status codes you will meet

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login