Search code examples
javascriptjsonnode.jsrpgle

Convert String to JSON node.js


Very new to node.js, I have string returning from RPGLE (as400) program, I would like to return as JSON example below.

String

{orderid:996553,workorder:996553.010,shipped:000000001,received:000000001,status:GOOD},
{orderid:996554,workorder:996554.010,shipped:000000001,received:000000001,status:GOOD},
{orderid:999290,workorder:999290.010,shipped:000000001,received:000000001,status:GOOD},
{orderid:999290,workorder:999290.020,shipped:000000001,received:000000001,status:GOOD},
{orderid:999290,workorder:999290.030,shipped:000000001,received:000000001,status:GOOD},
{orderid:999290,workorder:999290.040,shipped:000000001,received:000000001,status:GOOD},
{orderid:999290,workorder:999290.050,shipped:000000001,received:000000001,status:GOOD},

Would like to convert as below and send to application api

[{"orderid":144234,"workorder":"996553.010","shipped":1,"received":1,"status":"GOOD"},
{"orderid":999290,"workorder":"996553.010","shipped":1,"received":1,"status":"GOOD"},
{"orderid":999290,"workorder":"999290.010","shipped":1,"received":1,"status":"GOOD"},
{"orderid":999290,"workorder":"999290.020","shipped":1,"received":1,"status":"BAD"},
{"orderid":999290,"workorder":"999290.030","shipped":1,"received":1,"status":"GOOD"},
{"orderid":999290,"workorder":"999290.040","shipped":1,"received":1,"status":"GOOD"},
{"orderid":999290,"workorder":"999290.050","shipped":1,"received":1,"status":"GOOD"}]

What would be the best practice and how?


Solution

  • You can accomplish this string conversion through a series of regular expressions and a little decision logic to determine string and numeric values.

    var meh = "{orderid:996553,workorder:996553.010,shipped:000000001,received:000000001,status:GOOD},\
    {orderid:996554,workorder:996554.010,shipped:000000001,received:000000001,status:GOOD},\
    {orderid:999290,workorder:999290.010,shipped:000000001,received:000000001,status:GOOD},\
    {orderid:999290,workorder:999290.020,shipped:000000001,received:000000001,status:GOOD},\
    {orderid:999290,workorder:999290.030,shipped:000000001,received:000000001,status:GOOD},\
    {orderid:999290,workorder:999290.040,shipped:000000001,received:000000001,status:GOOD},\
    {orderid:999290,workorder:999290.050,shipped:000000001,received:000000001,status:GOOD},";
    
    meh = "[" +                                         // enclose with []
      meh.replace(/(\w+)(?=:)/g, '"$1"')                // search for words followed by a colon
        .replace(/,$/, '')                              // trim the ending comma
        .replace(/:([\w.]+)/g, function(match, value){  // grab the values
          return ':' + (                                // ensure preceding colon is in place
            isNaN(value) || value % 1 !== 0 ?           // is it a non-float number?
              '"' + value + '"' :                       // enclose with "" if not a non-float number
              parseFloat(value)                         // parse if is number
          );
        })
      + "]";                                            // enclose with []
    
    console.log(JSON.parse(meh));