bvstone

Parsing JSON data with RPG and JSONTOOL from BVSTools

Posted:

Parsing JSON data with RPG and JSONTOOL from BVSTools

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.


Last edited 10/17/2014 at 10:58:46




Reply




© Copyright 1983-2024 BVSTools
GreenBoard(v3) Powered by the eRPG SDK, MAILTOOL Plus!, GreenTools for Google Apps, jQuery, jQuery UI, BlockUI, TinyMCE and running on the IBM i (AKA AS/400, iSeries, System i).