Как убрать лишние скобки {} и id перечисления объектов в массивах?

Недавно спрашивал по ссылке о генерации JSON из HTML.

Мне дали такой код:

const domElement = document.querySelector('.first > .second > .child').children;

let array = extractJson(domElement);
let json = JSON.stringify(array);
console.log(json);

function extractJson(dom) {
  let json = {};
  for (let element of dom) {
    let key = element.querySelector('.name').textContent.replace(/\s\s+/g, ' ');
    let val = element.querySelector('.value').textContent.replace(/\s\s+/g, ' ');
    let classList = element.classList;

    if (classList.contains('strg')) {
      json[key] = val;
    } else if (classList.contains('nmbr')) {
      json[key] = parseInt(val);
    } else if (classList.contains('bool')) {
      let check = element.querySelector('.check');
      json[key] = check.checked;
    } else if (classList.contains('array')) {
      let array = element.querySelector('.child').children;
      json[key] = [extractJson(array)];
    } else if (classList.contains('obj')) {
      let array = element.querySelector('.child').children;
      json[key] = extractJson(array);
    }
  }
  return json;
}

Результат выполнения кода выходит такой:

{
 "squadName": "Super hero squad",
 "homeTown": "Metro City",
 "formed": 2016,
 "secretBase": "Super tower",
 "active": false,
 "members": [
  {
   "0": {
    "name": "Molecule Man",
    "age": 29,
    "secretIdentity": "Dan Jukes",
    "powers": [
     {
      "0": "Radiation resistance",
      "1": "Turning tiny",
      "2": "Radiation blast"
     }
    ]
   },
   "1": {
    "name": "Madame Uppercut",
    "age": 39,
    "secretIdentity": "Jane Wilson",
    "powers": [
     {
      "0": "Million tonne punch",
      "1": "Damage resistance",
      "2": "Superhuman reflexes"
     }
    ]
   },
   "2": {
    "name": "Eternal Flame",
    "age": 1000000,
    "secretIdentity": "Unknown",
    "powers": [
     {
      "0": "Immortality",
      "1": "Heat Immunity",
      "2": "Inferno",
      "3": "Teleportation",
      "4": "Interdimensional travel"
     }
    ]
   }
  }
 ]
}

Как убрать лишние фигурные скобки и id перечисления объектов или массивов при генерации, чтобы JSON был идентичен этому?

{
    "squadName": "Super hero squad",
    "homeTown": "Metro City",
    "formed": 2016,
    "secretBase": "Super tower",
    "active": true,
    "members": [
        {
            "name": "Molecule Man",
            "age": 29,
            "secretIdentity": "Dan Jukes",
            "powers": [
                "Radiation resistance",
                "Turning tiny",
                "Radiation blast"
            ]
        },
        {
            "name": "Madame Uppercut",
            "age": 39,
            "secretIdentity": "Jane Wilson",
            "powers": [
                "Million tonne punch",
                "Damage resistance",
                "Superhuman reflexes"
            ]
        },
        {
            "name": "Eternal Flame",
            "age": 1000000,
            "secretIdentity": "Unknown",
            "powers": [
                "Immortality",
                "Heat Immunity",
                "Inferno",
                "Teleportation",
                "Interdimensional travel"
            ]
        }
    ]
}

Ответы (1 шт):

Автор решения: benimaru

Нашел решение. Добавил следущую логику для массивов и вставил вызов функции в методе extractJson при проверке на массив json[key] = extractArray(array);(Спасибо Grundy♦):

function extractArray(dom) {
  let arrr = [];
  for (let element of dom) {
    let key = element.querySelector('.name').textContent.replace(/\s\s+/g, ' ');
    let val = element.querySelector('.value').textContent.replace(/\s\s+/g, ' ');
    let classList = element.classList;

    if (classList.contains('strg')) {
      arrr[key] = val;
    } else if (classList.contains('nmbr')) {
      arrr[key] = parseInt(val);
    } else if (classList.contains('bool')) {
      let check = element.querySelector('.check');
      arrr[key] = check.checked;
    } else if (classList.contains('obj')) {
      let array = element.querySelector('.child').children;
      arrr[key] = extractJson(array);
    }
  }
  return arrr;

Теперь JSON на входе идентичен JSON'у на выходе.

→ Ссылка