需要重新排列JSON

时间:2015-10-07 08:34:07

标签: javascript html json

我需要按照以下方式重新排列我的JSON数组。在输出中,我需要id作为键,并将对象本身作为其值。

输入:

[
    {
        "id": "1",
        "sub": [
            {
                "id": "1-1",
                "sub": [
                    {
                        "id": "1-1-1",
                        "sub": []
                    }
                ]
            },
            {
                "id": "1-2",
                "sub": []
            }
        ]
    },
    {
        "id": "2",
        "sub": []
    },
    {
        "id": "3",
        "sub": [
            {
                "id": "3-1",
                "sub": []
            }
        ]
    }
]

输出:

{
    "1": {
        "id": "1",
        "sub": {
            "1-1": {
                "id": "1-1",
                "sub": {
                    "1-1-1": {
                        "id": "1-1-1",
                        "sub": []
                    }
                }
            },
            "1-2": {
                "id": "1-2",
                "sub": []
            }
        }
    },
    "2": {
        "id": "2",
        "sub": []
    },
    "3": {
        "id": "3",
        "sub": {
            "3-1": {
                "id": "3-1",
                "sub": []
            }
        }
    }
}

我正在尝试使用递归,但它正在创建循环对象。

function rearrange(obj){
  obj[obj.id] = obj;
  for(var j = 0; j < obj.sub.length; j++){
    obj.sub[j][obj.sub[j].id] = obj.sub[j];
    if(obj.sub[j].sub.length > 0){
      rearrange(obj.sub[j]);
    }
  }
}

//调用

rearrange(myobj);

1 个答案:

答案 0 :(得分:2)

使用数组map功能。 map()方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。

var array = [{
    "id": "1",
    "sub": [{
        "id": "1-1",
        "sub": [{
            "id": "1-1-1",
            "sub": []
        }]
    }, {
        "id": "1-2",
        "sub": []
    }]
}, {
    "id": "2",
    "sub": []
}, {
    "id": "3",
    "sub": [{
        "id": "3-1",
        "sub": []
    }]
}];

function doMap(arr) {
    var output = arr.map(function(d) {
        var ob = {};
        if (d.sub)
            d.sub = doMap(d.sub);
        ob[d.id] = d;
        return ob;
    });
    return output;
};

alert(JSON.stringify(doMap(array)));

获得的输出

[{
    "1": {
        "id": "1",
        "sub": [{
            "1-1": {
                "id": "1-1",
                "sub": [{
                    "1-1-1": {
                        "id": "1-1-1",
                        "sub": []
                    }
                }]
            }
        }, {
            "1-2": {
                "id": "1-2",
                "sub": []
            }
        }]
    }
}, {
    "2": {
        "id": "2",
        "sub": []
    }
}, {
    "3": {
        "id": "3",
        "sub": [{
            "3-1": {
                "id": "3-1",
                "sub": []
            }
        }]
    }
}]