简体   繁体   English

如何将嵌套的 json 转换为 Javascript 中的 object 数组?

[英]How to Convert nested json to array of object in Javascript?

I've a deep nested object like this:我有一个像这样的深层嵌套 object :

{
  'name_1': 'val',
  'name_2': 'val',
  'name_3': {
    'name_4': {
      'name_5': {
        'name_6': 'val',
        'name_7': 'val',
        'name_8': {
          'name_9': 'val'
        }
      }
    }
  }
}

Here key can be anything instead of name_1, name_2, name_3...etc(names key as name_1, name_2.. just for quick understanding)这里的键可以是任何东西,而不是 name_1、name_2、name_3...等(将键命名为 name_1、name_2.. 只是为了快速理解)

I wanted to convert the above json to array of objects in the below mentioned format我想将上面的 json 转换为下面提到的格式的对象数组

[
  { "id": "1", "name": 'name_1: val', "parent_id": "0"},
  { "id": "2", "name": 'name_2: val', "parent_id": "0"},
  { "id": "3", "name": 'name_3', "parent_id": "0"},
  { "id": "4", "name": 'name_4', "parent_id": "3"},
  { "id": "5", "name": 'name_5', "parent_id": "4"},
  { "id": "6", "name": 'name_6: val', "parent_id": "5"},
  { "id": "7", "name": 'name_7: val', "parent_id": "5"},
  { "id": "8", "name": 'name_8', "parent_id": "5"},
  { "id": "9", "name": 'name_9: val', "parent_id": "8"},
]

Any help would be really apprectiated!!任何帮助将不胜感激!

You could take an iterative and recursive approach.您可以采用迭代和递归的方法。 (The id is stored in an object to keep the same object reference for it and this allows to use it in all nested recursive calls.) id存储在 object 中,以保持相同的 object 引用,这允许在所有嵌套递归调用中使用它。)

 function flat(object, id = { id: 0 }, parent_id = 0) { return Object.entries(object).reduce((r, [k, v]) => { var name = k + (typeof v === 'string'? ': ' + v: ''); r.push({ id: id.id++, name, parent_id }); if (v && typeof v === 'object') r.push(...flat(v, id, id.id)); return r; }, []); } var data = { name_1: 'val', name_2: 'val', name_3: { name_4: { name_5: { name_6: 'val', name_7: 'val', name_8: { name_9: 'val' } } } } }, result = flat(data); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM