我们正在根据一种简单的模板格式构建动态JSON有效负载,该模板格式指示了我们的有效负载应生成多少个级别,例如“ level1.level2”>将产生:
{
"level1": [
{
"level2": [
{
"someData": "willGoHere",
},
{
"someOtherData": "willAlsoGoHere"
}
]
}
]
}
显然,我们正在使用不同的命名结构,例如:“ client.ipcEvent.level3”,在某些情况下,我们正在测试4个级别。我们正在做错事情〜我们能够构建我们的javascript对象,但无法使用stringify()创建完整的 result ,因为出于某些奇怪的原因,针对我们的对象的stringify()仅返回第一个级别的数据:
{ "level1": [] }
。
我尝试更改对象加载值的方式,但一切都回到stringify()'删除'数组值,这些值在同一级别上没有伴随的属性/属性值。
答案 0 :(得分:7)
问题在于您的client
是一个 array ,但是您已在其上放置了不是数组条目的属性(您可以这样做是因为数组是对象):< / p>
JSON.stringify
仅包括一个数组的数组条目,不包括其其他属性:
const a = [];
a.nonEntryProperty = "foo";
a[0] = "bar";
console.log(JSON.stringify(a)); // ["bar"]
为确保数据正确地序列化为JSON,请在对象中包含类似对象的属性,并在数组中包括数组条目:
const structure = {
info: {
nonEntryProperty: "foo"
},
array: ["bar"]
};
console.log(JSON.stringify(structure, null, 4));
答案 1 :(得分:0)
好,解决了;我们应该在应该是对象的时候创建数组,反之亦然;对于模糊的问题,我们深表歉意,但谢谢TJ和塞巴斯蒂安。根据“ level1.level2”的规范,解决方案是为“ level1”创建对象{},为最后一项“ level2”创建数组[]。