简体   繁体   中英

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?

You could parse the lines into valid javascript objects and then stringify them into JSON like this:

 const s = ` {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}, `; const array = s.trim().split("\\n").map((line) => line .slice(1, -2) // remove brackets and comma .split(",") // break into individual key/value pairs .map((pair) => pair.split(":")) // split key/value pairs .reduce((result, [key, value]) => { // reduce pairs into an object result[key] = value; return result; },{}) ); const json = JSON.stringify(array, null, 2); console.log(json); 

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)); 

How is the RPGLE program creating the string? If it is doing it piece by piece, then the RPGLE program could probably add the quotes and format the numbers correctly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM