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

我有一个像这样的深层嵌套对象:

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

这里的密钥可以是任何东西,而不是name_1,name_2,name_3 ... etc(names密钥   为name_1,name_2 ..只是为了快速理解)

我想将上述json转换为以下所述格式的对象数组

[
  { "id": "1","name": 'name_1: val',"parent_id": "0"},{ "id": "2","name": 'name_2: val',{ "id": "3","name": 'name_3',{ "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',{ "id": "8","name": 'name_8',{ "id": "9","name": 'name_9: val',"parent_id": "8"},]

任何帮助都会得到真正的认可!

vcaonimav 回答:如何将嵌套的json转换为Javascript中的对象数组?

您可以采用迭代和递归的方法。 (id存储在一个对象中,以为其保留相同的对象引用,这允许在所有嵌套的递归调用中使用它。)

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

本文链接:https://www.f2er.com/3150064.html

大家都在问