我有一个返回此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。
谢谢,
答案 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);