2012-11-29 51 views
0

IM發送HTTP請求(使用AJAX)到我的服務器JSON數據,並返回JSON字符串是這樣的:優化解析(提取)與JavaScript

{ 

    "neighbors":{ 
     "data":[ 
      { 
       "id":"7f40cb24-603e-4943-9a0b-e16e024c8bd5", 
       "name":"jeff ferry", 
       "picture":"url", 
       "location":{ 
        "data":[ 
         { 
          "latitude":"xxx", 
          "longitude":"yyy" 
         } 
        ] 
       } 
      } 
     ] 
    } 
} 

,並在HTML頁面的ajax回調即時訪問諸如數據:

success: function (data) { 

    var outerObj = data.neighbor.data;  
    var res = ""; 

    for (i in outerObj)   
    { 
    if (outerObj .hasOwnProperty(i)) { 
     // my outer stuff    
      var innerObj = outerObj.data; 
      for (j in innerObj)   
      { 
      // my inner stuff 
       if (innerObj.hasOwnProperty(j)) { 
       } 
      } 
     }            
    } 
} 

但即時通訊想知道如果我可以通過一些優化(短)的方式訪問它?

明顯

+3

爲什麼你要定期訪問對象元素「解析」? – zerkms

+0

如果'longitude' /'latitude'是每個'neighbour'唯一的兩個sup屬性,那麼你可以檢查這些屬性並獲得它們。 除此之外,還沒有一個更簡短的方法。 – Cerbrus

+0

無論如何,你想做什麼? – Joseph

回答

3

也許你可以收緊從服務器返回的數據結構?由於1)位置屬性是真的只是一個緯度/長元組,以及2)內data陣列周圍的對象只是一個多餘的包裝,這個怎麼樣:

{ 
    "neighbors":[ 
     { 
      "id":"7f40cb24-603e-4943-9a0b-e16e024c8bd5", 
      "name":"jeff ferry", 
      "picture":"url", 
      "location":["xxx","yyy"] 
     } 
    ] 
} 

這樣一來,你的JavaScript是像:

success: function (data) { 

    var res = ""; // what was this for, anyway? 

    for (var n in data.neighbors) if (data.neighbors.hasOwnProperty(n) { 
     var neighbor = data.neighbors[n]; 
     // actions on the neighbor object here 

     var location = neighbor.location; 
     // actions on the location here 
    } 
} 
1

假設你只關心內部性質的任何幫助,我只想把它包在一個try-catch塊。

var outer, inner; 
try { 
    outer = data.neighbors.data[0]; 
    inner = outer.location.data[0]; 
    delete outer.location; 
} catch (e) { 
    // no good 
} 

即,like this

{ 「ID」: 「7f40cb24-603e-4943-9a0b-e16e024c8bd5」, 「名」: 「傑夫渡口」, 「圖片報」: 「URL」}

{ 「緯度」: 「XXX」, 「經度」: 「YYY」}

1

neighbours.data是一個數組。如果你想遍歷它們,你是for循環而不是foreach。

var i = 0, 
    outerLength = (neighbours.data && neighbours.data.length) || 0, 
    innerLength, j, 
    outerObj, innerObj; 

for (; i < length; i++) { 
    outerObj = neighbours.data[i]; 

    j = 0; 
    innerLength = (outerObj.data && outerObj.data.length) || 0; 

    for (; j < innerLength; j++) { 

     innerObj = outerObj.data[j]; 
     // do what you wish! 
    } 

} 
2

如果你更喜歡使用jQuery

var data 
$.getJSON(thejsonfile, function(e) { 
    data = e.neighbors.data[0] 
}) 

現在所有的數據裏面的「鄰居」是數據,您可以使用「數據」是指他們

所以希望得到ID參考這種方式var id = data.id

注意:任何在這些方括號[]是指一個循環,如果有,你就必須到「鄰居」列表中的一個或多個數據循環使用$.map() or $.each()