Internally we have used a JSON parser for some time, and now are being asked to make it available to customers.
We did this by providing the JSONTOOL library which contains, right now, a service program named F.JSON. This contains one subprocedure used to parse JSON. The prototype is as follows:
****************************************************************
* *
* If the data begins with an array, you will need to wrap it *
* as another object so things will work like this: *
* *
* Before: *
* [{object}, {object}] *
* *
* After: *
* {"data": [{object}, {object}] } *
* *
* Then you'll access it with data[index]:object *
* where index is the instance of the object to retrieve *
* *
* https://bvstools.com/jsontest.html *
* *
* 7/24/2014 - Added TAB to convert to blanks *
* - Changed conversion of CR, LF and TAB to blanks *
* if NOT in quotes. *
****************************************************************
*//////////////////////////////////////////////////////////////*
* #js_getData - get a character value from JSON data *
* *
* Input: *
* in_data (required) - The JSON Data *
* in_tag (required) - The tag to retrieve data for *
* *
* Tag should be in the format: *
* name1[index]:name2[index].... *
* *
* If an index is left off, 1 is assumed for the index. *
* *
* EXAMPLES: *
* *
* JSON Data *
* {"name":"Brad", "age":"43", "favoriteShow":"Top Gear"} *
* *
* #js_getData(JSONData:'name') = Brad *
* #js_getData(JSONData:'age') = 43 *
* #js_getData(JSONData:'favoriteShow') = Top Gear *
* *
* JSON Data *
* {"data":[ *
* { *
* "color": "red", *
* "value": "#f00" *
* }, *
* { *
* "color": "green", *
* "value": "#0f0" *
* } *
* ]} *
* *
* #js_getData(JSONData:'data[1]:color') = red *
* #js_getData(JSONData:'data[1]:value') = #f00 *
* #js_getData(JSONData:'data[2]:color') = green *
* #js_getData(JSONData:'data[2]:value') = #0f0 *
* *
* JSON Data *
* {"level1":{"level2":{"name1":"value1", "name2": "value2"}}} *
* *
* #js_getData(JSONData:'level1:level2:name1') = value1 *
* #js_getData(JSONData:'level1:level2:name2') = value2 *
* *
* Returns: *
* The data value of the tag requested *
* *
*//////////////////////////////////////////////////////////////*
D #js_getData PR 65535 Varying
D In_data 65535 Value Varying
D In_tag 65535 Value Varying
*--------------------------------------------------------------*
If you wish to receive a copy of JSONTOOL as well as a trial key, pleave visit www.bvstools.com/jsontool.html
We also have a web page set up so you can try things out at https://bvstools.com/jsontest.html.
Check out this Proof of Concept post using JSONTOOL for a real world example.