重新构造JSON文件中的大量值

重新构造JSON文件中的大量值,json,text,replace,formatting,format,Json,Text,Replace,Formatting,Format,我有一个包含大量以下值的JSON文件: "values": [ "Foo": 1, "Bar": 2, "Baz": 3, ... ], 如何有效地将其转换为: "values": [ { "name": "Foo", "value": 1 }, { "name": "Bar", "value": 2 }, { "name": "Baz",

我有一个包含大量以下值的JSON文件:

"values": [
      "Foo": 1,
      "Bar": 2,
      "Baz": 3,
      ...
  ],
如何有效地将其转换为:

"values": [
    {
      "name": "Foo",
      "value": 1
    },
    {
      "name": "Bar",
      "value": 2
    },
    {
      "name": "Baz",
      "value": 3
    },
      ...
  ],
任何帮助都将不胜感激

使用ES6:

Object.keys(values).map(name => ({
    name,
    value: values[name]
}))
没有ES6:

var keys = Object.keys(values);
var newValues = [];

for(var i = 0; i < keys.length; i++){
    newValues.push({
        name: keys[i],
        value: values[keys[i]]
    })
}
var-keys=Object.keys(值);
var newValues=[];
对于(变量i=0;i
好的,您的输入有两个问题。第一个事实是,给定的JSON无效,因此无法直接解析。
“values”
后面的方括号应为大括号,以允许使用散列而不是数组:

let raw_old_data =
    // Read the old file
    fs.readFileSync('./input_data.json').toString()

    // Remove all newlines which could interfere with the regex
    .replace(/[\r\n]/g, '')

    // Replace the square brackets after `"values"` with curly braces
    .replace(/"values": \[(.+?)\]/g, '"values": { $1 }');
要将此(现在有效)字符串转换为JSON对象,请使用:

第二个问题是存储值的格式不符合您的需要。您想从
{key:“value”}
转换为
[名称:“key”,值:“value”]
。假设您的Node版本支持ES6,下面的函数可以做到这一点(如果不支持,请查看Murillo的答案):

然后剩下要做的就是使用函数通过该函数循环来自旧对象的所有数据:

let new_data = old_data.map(fix_format);
并可选择将其写回文件以与其他程序一起使用:

fs.writeFileSync('./formatted_data.json', JSON.stringify(data, null, 2));

注意:函数中的
2
表示生成的JSON应该用2个空格填充,以保持可读性。

如果您打算使用接收到的数据,即使用
连接.query(您的自定义sql查询,(err,行,字段)

有关详细信息:


我建议您使用:

const myJson=JSON.stringify(rows[0]);

你能解释一下ES6到底是什么吗?ES6是JavaScript的一个重大更新,它包含了许多新特性,你可以在这个链接中看到:哦,但我的项目不使用JavaScript,我实际上是在寻找一个工具来查找和替换我需要的部分
let new_data = old_data.map(fix_format);
fs.writeFileSync('./formatted_data.json', JSON.stringify(data, null, 2));