为什么stringify()仅返回对象数组的第一级

时间:2019-04-10 13:36:47

标签: javascript arrays json object stringify

我们正在根据一种简单的模板格式构建动态JSON有效负载,该模板格式指示了我们的有效负载应生成多少个级别,例如“ level1.level2”>将产生:

{
  "level1": [
     {
       "level2": [
           {
              "someData": "willGoHere",
           },
           {
              "someOtherData": "willAlsoGoHere"
           }
       ]
     }
  ]
}

显然,我们正在使用不同的命名结构,例如:“ client.ipcEvent.level3”,在某些情况下,我们正在测试4个级别。我们正在做错事情〜我们能够构建我们的javascript对象,但无法使用stringify()创建完整的 result ,因为出于某些奇怪的原因,针对我们的对象的stringify()仅返回第一个级别的数据:

{ "level1": [] }

Valid XHTML

我尝试更改对象加载值的方式,但一切都回到stringify()'删除'数组值,这些值在同一级别上没有伴随的属性/属性值。

2 个答案:

答案 0 :(得分:7)

问题在于您的client是一个 array ,但是您已在其上放置了不是数组条目的属性(您可以这样做是因为数组是对象):< / p>

enter image description here

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”创建数组[]。