用javascript格式化/操作JSON响应

Formating / manipulating a JSON response in javascript

本文关键字:JSON 响应 操作 javascript 格式化      更新时间:2023-09-26

我有一个返回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++) {...}

在这里面,我尝试了很多事情,比如创建对象和数组来操纵结构而不需要看。我不知道如何获得一些以[{…}]开头的元素,如nodes元素,而另一些仅以{}开头的元素(如de data元素)。

谢谢,

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

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