首页 > 解决方案 > 如何将包含json对象的文件格式化为json数组

问题描述

我有一个包含多个对象的 json 文件,我想将它们转换为 JSON 数组如何执行此 javascript。我的总体目标是从中生成一个 CSV 文件。

这是示例文件内容,

{
  Name:"nom1",
  Cities:['city1','city2']
}
{
  Name:"nom2",
  Cities:['city4','city5']
}

注意上面是数据转储它的格式还不是正确的,我想把它转换成下面的格式

var data = [ { Name:"nom1", Cities:['city1','city2'] }, { Name:"nom2", Cities:['city3','city4'] } ]}; 

然后将其传递给下面的脚本。

我在一个文件中有数千个这样的对象。我想生成CSV数据如下

|名称|城市|

|nom1|城市1 |

|nom1|城市2 |

|nom2|城市3 |

|nom2|city4 |

我正在使用节点 javascript 来实现这一点,

const { Parser, transforms: { unwind } } = require('json2csv');

const data = {
  Name:"nom1",
  Cities:['city1','city2']
}
const fields = ['Name'];
const transforms = [unwind({ paths: ['features'] })];

const json2csvParser = new Parser({ fields, transforms });
const csv = json2csvParser.parse(myCars);

console.log(csv);

标签: javascriptnode.jsjsoncsvnpm

解决方案


这将完全像您提供的文件一样使用文件:

log-parser.js

const fs = require('fs')

async function fileToArray (file) {
  const fileContent = await fs.promises.readFile(file)
  const singleLined = fileContent
                .toString()
                .replace(/\n/g, '')
                .replace(/\}\{/g, '},{')
                .replace(/(\w+):/g, '"$1":')
                .replace(/'/g, '"')

  console.log(singleLined)
  const array = JSON.parse(`[${singleLined}]`)
  console.log(array)
}

fileToArray(process.argv[2])
node log-parser.js my-log-file.log

推荐阅读