Почему stringify () возвращает только первый уровень массива объектов - PullRequest
2 голосов
/ 10 апреля 2019

Мы создаем динамическую полезную нагрузку JSON в соответствии с простым форматом шаблона, который указывает, сколько уровней должна создавать наша полезная нагрузка, например, «level1.level2»>:

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

Очевидно, что мыработа с другой структурой именования, например: "client.ipcEvent.level3" и в некоторых случаях мы тестируем 4 уровня.Мы делаем что-то не так ~ мы можем построить наш объект javascript, но не можем использовать stringify () для создания полного результата , потому что по какой-то странной причине stringify () для нашего объекта возвращает только 1-й уровеньdata:

{ "level1": [] }

Valid XHTML.

Я пытался изменить способ загрузки нашего объекта со значениями, но все возвращается к stringify (), «сбрасывающему» массивзначения, которые не имеют сопутствующих значений атрибутов / свойств на одном уровне.

Ответы [ 2 ]

7 голосов
/ 10 апреля 2019

Проблема в том, что ваш 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 голосов
/ 12 апреля 2019

ОК, решено; мы создавали массивы, когда это должны были быть объекты, и наоборот; извините за неопределенный вопрос, но спасибо Ти Джей и Себастьян. На основе спецификации "level1.level2" было решено создать объект {} для "level1" и array [] для последнего элемента "level2" ...

...