NX-JSON is a vendor-neutral internal exchange format for ophthalmic device data. It is not a direct FHIR, DICOM, HL7, or VIS900 model. It is the stable Nexio payload that adapters read from and write to.
The design rule is simple: parsers normalize raw device frames into NX-JSON, then exporters or downstream services map NX-JSON to their own target format.
Every payload uses the nx-data root object.
{
"nx-data": {
"header": {
"jsonVersion": "0.1.5",
"encoding": "UTF-8",
"jsonStylesheetType": "nexio"
},
"entryPoint": "",
"endPoint": ["API:json"],
"dataset": [
{
"AR": {}
}
]
}
}
| Path | Type | Required | Meaning |
|---|---|---|---|
nx-data.header.jsonVersion |
string | yes | NX-JSON version. Current docs target 0.1.5; parsers may still emit 0.1.3. |
nx-data.header.encoding |
string | yes | Usually UTF-8. |
nx-data.header.jsonStylesheetType |
string | yes | Usually nexio. |
nx-data.entryPoint |
string | yes | Source interface or component that produced/received the payload. |
nx-data.endPoint |
string array | yes | Routing targets. |
nx-data.dataset |
array | yes | Ordered list of dataset objects. Each item normally has one dataset key. |
The historical schema allows:
NFCAPIFIFOEyeCardUART:<name>MQTT:<topic>nexSoft currently supports a wider routing vocabulary:
| Endpoint | Meaning |
|---|---|
API:json |
Store payload for GET /getjson/. |
webHook:<name> |
POST payload to a configured webhook destination. |
Serial:<port_config_name> |
Write to a configured serial device driver. |
MQTT:<topic> |
Publish payload to an MQTT topic. |
JavaCard |
Write payload to a JavaCard data card. |
EyeCard |
Write payload to an EyeCard. |
DIR:<path> |
Write a timestamped JSON file. |
DICOM:<destination_name> |
Export supported datasets as DICOM objects. |
Most measurement datasets use this shape:
{
"AR": {
"common": {},
"measurement": {
"header": {},
"data": {
"R": {},
"L": {},
"B": {}
}
}
}
}
R means right eye, L means left eye, and B means binocular or global measurement values.
| Path | Type | Meaning |
|---|---|---|
common.company |
string | Device manufacturer or source company. |
common.hostname |
string | Source host name when available. |
common.modelName |
string | Device model. |
common.machineNo |
string | Device serial or machine number. |
common.ROMVersion |
string | Device ROM/firmware version. |
common.sourceToken |
string | Source token or import identifier. |
common.version |
string | Source application or protocol version. |
common.date |
string | Measurement date, recommended format YYYY-MM-DD. |
common.time |
string | Measurement time, recommended format HH:MM:SS. |
common.inputVector |
string | Source input vector or channel descriptor. |
common.patient.number |
integer or null | Local numeric patient number. |
common.patient.ID |
string | Patient identifier. |
common.patient.firstName |
string | Patient first name. |
common.patient.middleName |
string | Patient middle name. |
common.patient.lastName |
string | Patient last name. |
common.patient.gender |
string | Patient gender as received. |
common.patient.age |
integer or null | Patient age. |
common.patient.DOB |
string | Date of birth. |
common.operator.number |
integer or null | Operator number. |
common.operator.ID |
string | Operator identifier. |
Use null for known structured fields whose value is absent. Use an empty string for unknown text/code fields. Preserve numeric signs as received from the source device.
Do not assume all cylinders are minus-cylinder. If an export target requires a cylinder convention, the adapter must convert explicitly and document that conversion.