将字符串转换为 JSON node.js

Convert String to JSON node.js

对 node.js 很陌生,我有来自 RPGLE (as400) 程序的字符串 return,我想 return 作为下面的 JSON 示例。

字符串

{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},

想按如下方式转换并发送给应用程序 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"}]

最佳做法是什么?如何做?

您可以将这些行解析为有效的 javascript 对象,然后将它们字符串化为 JSON,如下所示:

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

您可以通过一系列正则表达式和一些确定字符串和数值的决策逻辑来完成此字符串转换。

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, '""')                // 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));

RPGLE 程序如何创建字符串?如果它是一块一块地做的,那么 RPGLE 程序可能会添加引号并正确格式化数字。