# JSONTODATA Workflow Application

## Overview

The **JSONTODATA** workflow application lets you parse JSON content into process data.

## How it works

* The JSONTODATA application requires either the `JSON_CONTENT` or the `JSON_CONTENT_FILE` parameter; these correspond to the JSON to parse.<br>
* The application supports the JSONPath query language (see [https://github.com/json-path/JsonPath](https://github.com/json-path/JsonPath/)), which allows extraction of specific data from JSON content, similar to XPath expressions in XML.<br>
* Application logs are available. These can be specified by setting the value of the  `JsonToDataLogLevel` parameter in the `web.config` file to `0` to deactivate logs, `1` for error logs, `2` for information logs, or `3` for debug logs; the default value is `0`.<br>

## Parameters

| Parameter           | Type | Direction | Description                        |
| ------------------- | ---- | --------- | ---------------------------------- |
| `JSON_CONTENT`      | TEXT | IN        | Query to execute                   |
| `JSON_CONTENT_FILE` | FILE | IN        | Query to execute, stored in a file |

## Parameter mapping

### Using simple parameter names

The application supports custom OUT parameters to map simple JSON content.

📌 **Example**

```
{
    "person": {
        "address": {
            "street": "160 Guy Street",
            "zipcode": "J4G 1U4"
        },
        "age": 30,
        "name": "John"
    }
}
```

The following parameters allow you to map the JSON content to different process data:

| Parameter                | Type | Direction | Retrieve the value into a data | Result           |
| ------------------------ | ---- | --------- | ------------------------------ | ---------------- |
| `person.address.street`  | Text | OUT       | `DATA_STREET`                  | `160 Guy Street` |
| `person.address.zipcode` | Text | OUT       | `DATA_ZIPCODE`                 | `J4G 1U4`        |
| `person.age`             | Text | OUT       | `DATA_AGE`                     | `30`             |
| `person.name`            | Text | OUT       | `DATA_NAME`                    | `John`           |

### Using JSONPath query language

The application supports the JSONPath query language, similar to XPath expressions in XML. This language allows you to retrieve specific data from a JSON. For more details regarding the JSONPath syntax, see <https://github.com/json-path/JsonPath>.

📌 **Example**

```
{
    "person": {
      "name": "Elizabeth",
      "children": [
        {
          "name": "Charles",
          "age": 30,
          "children": [
            {
              "name": "Nathalie",
              "children": [
                {
                  "name": "George",
                  "age": 8
                },
                {
                  "name": "Charlotte",
                  "age": 10
                },
                {
                  "name": "Jefferson",
                  "age": 7
                }
              ]
            },
            {
              "name": "Harry"
            }
          ]
        },
        {
          "name": "Bob",
          "age": 20,
          "children": [
            {
              "name": "John"
            },
            {
              "name": "Mark"
            }
          ]
        }
      ]
    }
}
```

In the above example, we want to get the names of Charles's grandsons who are older than seven years old, and we also want these names to be separated by a `|` (using the `APP_JSONPATH_DELIMITER` IN parameter). To get this information, the following parameters must be defined:

| Parameter                | Type | Direction | IN Value                                                                          | OUT Value                                          |
| ------------------------ | ---- | --------- | --------------------------------------------------------------------------------- | -------------------------------------------------- |
| `APP_JSONPATH_DELIMITER` | Text | IN        | `\|`                                                                              | -                                                  |
| `PARAM1__JSONPATH`       | Text | INOUT     | `person.children[?(@.name == 'Charles')].children[*].children[?(@.age > 7)].name` | `DATA1_VALUE` (value will be: `George\|Charlotte`) |

{% hint style="warning" %}

* In the `PARAM1__JSONPATH` parameter name, the `PARAM1` name is not relevant, but it must be followed by the `__JSONPATH` suffix (**two** underscores are used in the suffix).<br>
* The default value of `APP_JSONPATH_DELIMITER` is a comma (`,`) when this parameter is not defined.
  {% endhint %}
