在javascript中格式化/操作JSON响应

时间:2015-02-09 23:14:53

标签: javascript arrays json

我有一个返回此JSON对象的服务:

"[{"id":"1","name":"garage","parent":null},{"id":"2","name":"car","parent":"1"},{"id":"3","name":"engine","parent":"2"}]"

这就是Fiddler的看法:

- JSON
    |- {}
        |-- id=1
        |-- name=garage
        |-- parent=(null)

    |- {}
        |-- id=2
        |-- name=car
        |-- parent=1

    |- {}
        |-- id=3
        |-- name=engine
        |-- parent=2

另一方面,我有一个JavaScript库,期望一个对象如下:

elements: {
  nodes: [
    { data: { id: '1', name: 'garage' } },
    { data: { id: '2', name: 'car' } },
    { data: { id: '3', name: 'engine' } }
  ], 

  edges: [
    { data: { id: '1', source: '1', target: '2' } },
    { data: { id: '2', source: '2', target: '3' } }
  ]
}

我尝试使用以下方法将我的JSON响应转换为数组:

var jsonResponseAsArray = $.parseJSON(getJSON());

然后迭代它以格式化其内容:

for (var i = 0; i < jsonResponseAsArray.length; i++) {...}

在其中,我尝试了很多东西,比如创建对象和数组来操作结构而不看。我不知道如何让一些元素以[{...}]开头,例如节点元素,而其他元素只有{},例如de data element。

谢谢,

1 个答案:

答案 0 :(得分:0)

这就是我解决这个问题的方法。我相信有一个最好/更优雅的解决方案:

    var jsonResponseAsArray = $.parseJSON(getJSON());
    var elements = {}
    var obj = { "nodes": [], "edges": [] };

    for (var i = 0; i < jsonResponseAsArray.length; i++) {
        var data = {};
        var map = {};
        var data1 = {};
        var map1 = {};

        if (jsonResponseAsArray[i].parent != null) {
            map1["id"] = jsonResponseAsArray[i].id + jsonResponseAsArray[i].parent;
            map1["source"] = jsonResponseAsArray[i].id;
            map1["target"] = jsonResponseAsArray[i].parent;
            data1['data'] = map1;
            obj.edges.push(data1);
        }

        map["id"] = jsonResponseAsArray[i].id;
        map["name"] = jsonResponseAsArray[i].name;
        data['data'] = map
        obj.nodes.push(data);
    }

    elements["elements"] = obj;
    var elements = JSON.stringify(elements);