将带分隔符的测试文件转换为 JSON 对象 Node.JS

Convert Delimited Test File to JSON Object Node.JS

fs.readFile('data.txt', 'utf8', (err, result)=>{
  if(err){
    console.log(err);
  }
  else{
    console.log(result);
  }
})

以上代码运行良好。但我想将结果解析为 JSON 对象。

测试文件格式

test1:value1:"Pass":John:"Log1"

test2:value2:"Fail":Peter:"Log2"

test3:value3:"Pass":Peter:"Log3"

结果变量的格式

test1:value1:"Pass":John:"Log1"

test2:value2:"Fail":Peter:"Log2"

test3:value3:"Pass":Peter:"Log3"

现在我想将结果转换为 JSON 对象。

[
 {
   "test": "test1",
   "value": "value1",
   "status": "Pass",
   "name": "John",
   "log": "Log1"
 },
 {
   "test": "test2",
   "value": "value2",
   "status": "Fail",
   "name": "Peter",
   "log": "Log2"
 },
 {
   "test": "test3",
   "value": "value3",
   "status": "Pass",
   "name": "Peter",
   "log": "Log3"
 }
]

请注意。我也想使用result所以我需要在得到result

的值后进行处理

不确定您是否需要对象数组或其 JSON 字符串表示形式,因此这两个结果都是:

const fs = require('fs');

fs.readFile('data.txt', 'utf8', (err, result) => {
  if (err) {
    console.log(err);
  } else {
    console.log(result);

    const array = result.split(/(?<=.)[\r\n]+(?=.)/u).map((line) => {
      const values = line.trim().split(/\s*:\s*/u)
                     .map(value => value.replace(/^"|"$/gu, ''));
      const keys = ['test', 'value', 'status', 'name', 'log'];
      return Object.fromEntries(keys.map((key, index) => [key, values[index]]));
    });
    console.log(array);

    const json = JSON.stringify(array, null, '  ');
    console.log(json);
  }
});