将嵌套的 JSON 转换为数组

时间:2020-12-30 11:53:21

标签: arrays json multidimensional-array

如何将带有嵌套子代的 JSON 转换为包含 parent_id 的数组,谢谢!

var json = {  
        id: "1",  
        name: "loreim ipsum",  
        data: {},  
        children: [{  
            id: "2",  
            name: "lorem ipsum1",  
            data: {},  
            children: [{  
                id: "3",  
                name: "lorem ipsum2",  
                data: {},  
                children: [{
                ..............

到这样的数组

array(
    array('id' => 1, 'parent_id' => null, 'name' => 'lorem ipsum'),
    array('id' => 2, 'parent_id' => 1, 'name' => 'lorem ipsum1'),
    array('id' => 3, 'parent_id' => 1, 'name' => 'lorem ipsum2'),
    array('id' => 4, 'parent_id' => 2, 'name' => 'lorem ipsum3'),
    array('id' => 5, 'parent_id' => 3, 'name' => 'lorem ipsum4'),
    array('id' => 6, 'parent_id' => null, 'name' => 'lorem ipsum5'),
);

1 个答案:

答案 0 :(得分:0)

递归构建平面数组-

var json = {
  id: "1",
  name: "loreim ipsum",
  data: {},
  children: [{
    id: "2",
    name: "lorem ipsum1",
    data: {},
    children: [{
        id: "3",
        name: "lorem ipsum2",
        data: {},
        children: [{
          id: "4",
          name: "lorem ipsum2",
          data: {}
        }]
      },
      {
        id: "5",
        name: "lorem ipsum2",
        data: {},
        children: [{
          id: "6",
          name: "lorem ipsum2",
          data: {}
        }]
      }
    ]
  }]
}

function flat(array, parentId) {
  var result = [];
  array.forEach(function(a) {

    var newObject = Object.assign({}, a);
    delete newObject.children;
    newObject.parent_id = parentId;
    result.push(newObject);
    if (Array.isArray(a.children)) {
      result = result.concat(flat(a.children, a.id));
    }
  });
  return result;
}

console.log(flat([json], null));

相关问题