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

问题描述 投票:2回答:2

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

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

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

{ "level1": [] }

.

我已经尝试改变我们的对象加载值的方式,但它都返回到stringify()'drop'关闭在同一级别没有伴随属性/属性值的数组值。

javascript arrays json object stringify
2个回答
7
投票

问题是你的client是一个数组,但是你在其上放置的属性不是数组条目(你可以这样做,因为数组是对象):

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));

0
投票

好的,解决了;当它应该是对象时我们创建数组,反之亦然;抱歉这个模糊的问题,但谢谢TJ和塞巴斯蒂安。基于“level1.level2”的规范,解决方案是为“level1”创建对象{},为最后一个项目“level2”创建array [] ...

© www.soinside.com 2019 - 2024. All rights reserved.