Skip to content

Latest commit

 

History

History
117 lines (88 loc) · 3.08 KB

File metadata and controls

117 lines (88 loc) · 3.08 KB

JSON De/serialization

Our SDK handles the de/serialization of the AAS models from and to JSON format through the module :py:mod:`aas_core3_rc02.jsonization`.

Serialize

To serialize, you call the function :py:func:`aas_core3_rc02.jsonization.to_jsonable` on an instance of :py:class:`aas_core3_rc02.types.Environment` which will convert it to a JSON-able mapping.

Here is a snippet that converts the environment first into a JSON-able mapping, and next converts the JSON-able mapping to text:

.. testcode::

    import json

    import aas_core3_rc02.types as aas_types
    import aas_core3_rc02.jsonization as aas_jsonization

    # Prepare the environment
    environment = aas_types.Environment(
        submodels=[
            aas_types.Submodel(
                id="some-unique-global-identifier",
                submodel_elements=[
                    aas_types.Property(
                        id_short = "some_property",
                        value_type=aas_types.DataTypeDefXsd.INT,
                        value="1984"
                    )
                ]
            )
        ]
    )

    # Serialize to a JSON-able mapping
    jsonable = aas_jsonization.to_jsonable(environment)

    # Print the mapping as text
    print(json.dumps(jsonable, indent=2))

Expected output:

.. testoutput::

    {
      "submodels": [
        {
          "id": "some-unique-global-identifier",
          "submodelElements": [
            {
              "idShort": "some_property",
              "valueType": "xs:int",
              "value": "1984",
              "modelType": "Property"
            }
          ],
          "modelType": "Submodel"
        }
      ]
    }

De-serialize

Our SDK can convert a JSON-able mapping back to an instance of :py:class:`aas_core3_rc02.types.Environment`. To that end, you call the function :py:func:`aas_core3_rc02.jsonization.environment_from_jsonable`.

Here is an example snippet:

.. testcode::

    import json

    import aas_core3_rc02.jsonization as aas_jsonization

    text = """\
        {
          "submodels": [
            {
              "id": "some-unique-global-identifier",
              "submodelElements": [
                {
                  "idShort": "someProperty",
                  "valueType": "xs:boolean",
                  "modelType": "Property"
                }
              ],
              "modelType": "Submodel"
            }
          ]
        }"""

    jsonable = json.loads(text)

    environment = aas_jsonization.environment_from_jsonable(
        jsonable
    )

    for something in environment.descend():
        print(type(something))

Expected output:

.. testoutput::

    <class 'aas_core3_rc02.types.Submodel'>
    <class 'aas_core3_rc02.types.Property'>

Errors

If there are any errors during the de-serialization, an :py:class:`aas_core3_rc02.jsonization.DeserializationException` will be thrown. Errors occur whenever we encounter invalid JSON values. For example, this is the case when the de-serialization function expects a JSON object, but encounters a JSON array instead.