Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

JSON representations for exchange standards are widely used in today’s architectures. In RESTful web services, JSON is often the preferred format for the service response, due to its compactness and ease of use in mobile applications. Other standards used in healthcare, such as HL7-FHIR, support JSON as well as XML, together with other formats such as RDF.

...

In order to make XML and JSON representations of the same standard interconvertible without any information loss, a set of principles, usually named "conversion conventions" have been developed and are publicly available. See e.g. See http://wiki.open311.org/JSON_and_XML_Conversion/

This document explains the principles of the JSON representation, and the conventions used. These are based on the "Flickr conventions" for JSON (https://www.flickr.com/services/api/response.json.html).

Note: The Data Exchange Standards team is still considering the development of a native JSON schema so that JSON files can be checked by a validating JSON parser to test that the file is syntactically valid. 

Main principles

For the ODM  ODM JSON implementation, the following main principles listed below apply:

  • Like XML, JSON is case-sensitive.
  • JSON is based on sets of name-value pairs. Name and Value are embedded in double quotes and separated by a colon.
    Example Example:
    "OID": "MyStudy"
  • XML elements are represented as JSON objects.
  • A JSON object is an unordered set of name-value pairs. An object begins with a left brace '{' and ("{") and ends with right brace '("}'"), preceded by the object name (in double quotes). Each name is followed by colon and the name/value pairs are separated by a comma.
  • Arrays of objects or name-value pairs are represented by and embedded in square brackets.
    For  For example:
    ["a","b","c"] represents a list of the objects with name "a", "b", and "c".

Protocol Element element in JSON example:

Code Block
languagejs
"Protocol": {
    "StudyEventRef": [{
        "Mandatory": "Yes",
        "OrderNumber": 1,
        "StudyEventOID": "BASELINE"
    }]
}

This example  shows the JSON serialization of the XML element " Protocol " with an array of child " StudyEventRef " elementelements.   The " StudyEventRef " element is a JSON object (shown in curly brackets) with values for the " Mandatory", " OrderNumber" , and " StudyEventOID " attributes. Since the The StudyEventRef element is defined as  as an array (with brackets) so as many as needed can be included.

Very complex and/or large JSON or XML files my have a single line.   Tools for reviewing or hand-authoring of JSON or XML may use line breaks and indentation so that the text is easier to read. Line breaks within Value strings  have meaning and must be represented with \n.   Indentation or line breaks can be used outside of quoted value strings but have no meaning.

  • XML text content is treated as a name-value pair with the name being "_content".
    Example: 
Code Block
languagejs
"StudyNameReasonForChange": {"_content": "TestInvestigator Studytyping 003error"}

and combined with the parent element "GlobalVariablesAuditRecord":

Code Block
languagejs
"GlobalVariablesAuditRecord": {
    "StudyNameUserRef": {"_contentUserOID": "Test Study 003USR.001"},
    "LocationRef": {"LocationOID": "StudyDescription"LOC.007"},
	"DateTimeStamp": {"_content": "Test Study 003 created by API2022-07-03"},
      
	"ProtocolNameReasonForChange": {"_content": "TestInvestigator Study 003 created by APItyping error"} 
}
  • Namespaces are ignored.
    For ODM, this essentially means that the attribute "xml:lang" translates into "lang".
    Example representing the ODM-XML Description element with child element TranslatedText, having the xml:lang attribute with the value "en" and the text content "Unique identifier for a study":
Code Block
languagejs
"Description": {
    "TranslatedText": [{
        "lang": "en",
        "_content": "Unique identifier for a study."
    }]
}

...

  • As usual in JSON, the root element is not explicitly named:.
    Example representing the ODM element with attributes CreationDateTime, Description, FileOID, FileType, Granularity, ODMVersion, and Originator:
Code Block
languagejs
{
    "CreationDateTime": "2011-10-24T10:05:00",
    "Description": "JSON test",
    "FileOID": "JSON_Test_2020",
    "FileType": "Snapshot",
    "Granularity": "Metadata",
    "ODMVersion": "2.0",
    "Originator": "MySystem",
    ...
    ...
}

...

Pagenav2