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

Gre*_*les 2 javascript arrays json object stringify

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

{
  "level1": [
     {
       "level2": [
           {
              "someData": "willGoHere",
           },
           {
              "someOtherData": "willAlsoGoHere"
           }
       ]
     }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

{ "level1": [] }
Run Code Online (Sandbox Code Playgroud)

有效的XHTML

我试过改变对象加载值的方式,但是所有这些都回到stringify()'删除'没有相同级别的伴随属性/属性值的数组值。

T.J*_*der 7

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

在此处输入图片说明

JSON.stringify 仅包括数组的数组条目,不包括其他属性:

const a = [];
a.nonEntryProperty = "foo";
a[0] = "bar";
console.log(JSON.stringify(a)); // ["bar"]
Run Code Online (Sandbox Code Playgroud)

为确保将数据正确序列化为JSON,请在对象中包含类似对象的属性,并在数组中包括数组条目:

const structure = {
  info: {
    nonEntryProperty: "foo"
  },
  array: ["bar"]
};
console.log(JSON.stringify(structure, null, 4));
Run Code Online (Sandbox Code Playgroud)

  • 不要在数组对象中添加属性,而要使对象包含数组属性,例如`{“ bar”:“ foo”,“ contents”:[1,4,6]}` (2认同)
  • @GregRowles-在答案中要说的(道!):将对象用于对象,将数组用于数组。我已经更新了,对此感到抱歉。 (2认同)