JSON_TO_PROCESS

Use the JSON_TO_PROCESS script function to store JSON values in an internal list (process) for further processing (example, iteration over elements).

Notes:

  • Use this function when you need to access an array of JSON values, as JSON_GET_VALUE can only access individual (primitive) values.
  • The data sequence creates a line for each selected value.

Syntax

JSON_TO_PROCESS (JSONJSONPath [,MODE])

Parameters

Parameter Description Format / Allowed Values
JSON A string or variable containing a valid JSON document. String or script variable
JSONPath A valid JSONPath expression that identifies the values to be stored. String or script variable
MODE

Extracts the value matched by the JSONPath expression (VALUE), the absolute JSONPath to that value (PATH) or the keys of a JSON Object (KEYS).

Tip: When setting MODE to PATH, the function does not store the matched function value, but its absolute JSONPath. This path can be used to modify the value later (see examples below).

Keyword

Allowed values: VALUE, PATH, KEYS

Default: VALUE

Return Value

The script function stores values from a JSON document matched by a JSONPath expression in a data sequence (internal list). The reference to the data sequence that is created is returned as a return code.

Runtime Errors

JSON_TO_PROCESS will fail with a runtime error on the following conditions:

  • 45334: If your JSON document is invalid.
  • 45342: Syntax Error in JSONPath expression.
  • 45347: Invalid Mode Parameter: Value, Path or Keys expected.
  • 45350: In keys mode, the JSONPath has to select an object.

Examples

This example uses the script function to print the host IP addresses contained in the JSON structure:

:SET &JSON_DOC# = '[{"host":"192.168.0.10","active":true},{"host":"192.168.0.20","active":false},{"host":"192.168.0.29","active":true}]'

:SET &HND# = JSON_TO_PROCESS(&JSON_DOC#'$..host')

:PROCESS &HND#

:SET &HOST_IP# = GET_PROCESS_LINE(&HND#)

:PRINT "&HOST_IP#"

:ENDPROCESS

Activation report result:

U00020408 192.168.0.10

U00020408 192.168.0.20

U00020408 192.168.0.29

Iterate over all keys and values of a JSON object using the KEYS mode:

:SET &JSON_DOC# = '{"serverConfig": {"OS":"Linux","Cores":8,"RAM": 16, "DiskType":"SSD","DiskSpace":512}}'

:SET &OBJPATH# = '$.serverConfig'

 

! First, we retrieve all keys of the serverConfig object using the "KEYS" mode, i.e. "OS", "Cores",...

 

:SET &KEYS# = JSON_TO_PROCESS(&JSON_DOC#,&OBJPATH#,"KEYS")

:PROCESS &KEYS#

:SET &KEY# = GET_PROCESS_LINE(&KEYS#)

 

! Now, we retrieve the value for that key by concatenating the objectpath and the keyname

 

:SET &VALUE# = JSON_GET_VALUE(&JSON_DOC#,'&OBJPATH#.&KEY#')

:P '&KEY#:&VALUE#'

:ENDPROCESS

Activation report result:

U00020408 OS:Linux

U00020408 Cores:8

U00020408 RAM:16

U00020408 DiskType:SSD

U00020408 DiskSpace:512

Set all values of the active property to true. This is done by selecting the JSONPaths of all active properties and then using JSON_SET_VALUE to modify that paths to true:

:SET &JSON_DOC# = '[{"host":"192.168.0.10","active":false},{"host":"192.168.0.20","active":false},{"host":"192.168.0.29","active": true}]'

:SET &HND# = JSON_TO_PROCESS(&JSON_DOC#'$..active'"PATH")

:PROCESS &HND#

: SET &STATUS_PATH# = GET_PROCESS_LINE(&HND#)

: SET &RET# = JSON_SET_VALUE(&JSON_DOC#&STATUS_PATH#'true')

:ENDPROCESS

:PRINT &JSON_DOC#

Activation report result:

U00020408 [{"host":"192.168.0.10","active":"true"},{"host":"192.168.0.20","active":"true"},{"host":"192.168.0.29","active":"true"}]

See also: