2015-02-09 30 views
-1

我返回該JSON對象服務:格式化/操作在JavaScript中的JSON響應

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

這是它的外觀上的小提琴手:

- 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響應轉換爲數組usin G:

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

,然後遍歷它來格式化其內容:

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

裏面,對,我已經嘗試了很多東西,如創建對象和數組操作結構不看。我不知道如何獲得一些以[{...}]開頭的元素,例如節點元素,而其他元素只能使用{},例如de數據元素。

謝謝,

+0

顯示真正的JSON,而不是你在Fiddler中看到的 – Dalorzo 2015-02-09 23:37:49

回答

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