首页 > 解决方案 > 如何给我的 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,有没有人有一个好的方法来做到这一点?

标签: javascriptjson

解决方案


只需定义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);

如果是一个对象,那么您可以使用andresults使代码更简洁: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)

推荐阅读