如何在不将其实现到循环中的情况下为JSON字典提供主键?

时间:2019-05-16 06:40:50

标签: javascript json

我正在将一些代码从python转换为Javascript(我在JS中没有经验),作为其中的一部分,我需要编写一个JSON,目前在用JS编写时看起来像这样(只是一个简单的示例):

[
  {
    "Num": "000000",
    "Status": 1,
  },
  {
    "Num": "00001",
    "Status": 0,
  },
]

但是我需要它看起来像这样:

{
    "mydata": [
        {
            "Num": "00000",
            "Status": 1,
        },
        {
            "Num": "00001",
            "Status": 0,
        },
    ]
}

如何修改我的代码以为整个JSON生成一个主键,这就是我到目前为止所拥有的:

var jsondata = []
for (result in results) {
    jsondata.push({

        'Num' : idnum,      
        'Status': results[result].StatusID,  
    })
}

let data = JSON.stringify(jsondata, null, 2)
fs.writeFileSync('testingjson.json', data)

这里的代码位于for循环中,所以我不能只将密钥写在push中,它将为循环的每次迭代生成mydata密钥。

我需要知道如何预定义mydata,有人能做到这一点吗?

1 个答案:

答案 0 :(得分:2)

只需将mydata定义为数组,然后最后创建一个对象,其中mydata是键之一:

const mydata = []
for (const result in results) {
  mydata.push({
    'Num' : idnum,      
    'Status': results[result].StatusID,  
  });
}
const json = JSON.stringify({ mydata }, null, 2);

如果要使用其他键名,则在字符串化时将其更改,例如:

const json = JSON.stringify({ someKeyName: mydata }, null, 2);

如果results是对象,则可以使用Object.valuesmap使代码更简洁:

const Num = idnum;
const mydata = Object.values(results)
  .map((item => ({ Num, Status: item.StatusID }));
const json = JSON.stringify({ mydata }, null, 2);
fs.writeFileSync('testingjson.json', data)