2011-05-24 190 views
3
{"widget": { 
    "debug": "on", 
    "window": { 
     "title": "Sample Konfabulator Widget", 
     "name": "main_window", 
     "width": 500, 
     "height": 500 
    }, 
    "image": { 
     "src": "Images/Sun.png", 
     "name": "sun1", 
     "hOffset": 250, 
     "vOffset": 250, 
     "alignment": "center" 
    }, 
    "text": { 
     "data": "Click Here", 
     "size": 36, 
     "style": "bold", 
     "name": "text1", 
     "hOffset": 250, 
     "vOffset": 100, 
     "alignment": "center", 
     "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
    } 
}}  

這是我的JSON字符串。現在我想在這個JSON中搜索名稱,然後顯示結果...在JSON中搜索對象

+0

圖像名稱?文本名稱?或窗口名稱? – 2011-05-24 12:26:47

+0

任何名稱......在這個完整的json對象 – 2011-05-24 12:27:51

+0

中,請用一些代碼來澄清您的目的 – 2011-05-24 12:29:23

回答

6

迭代冒號分隔值通過按鍵: (增強阿米特·古普塔的答案)

var result = []; 
getNames(data, "name"); 
document.write("result: " + result.join(", ")); 

function getNames(obj, name) { 
    for (var key in obj) { 
     if (obj.hasOwnProperty(key)) { 
      if ("object" == typeof(obj[key])) { 
       getNames(obj[key], name); 
      } else if (key == name) { 
       result.push(obj[key]); 
      } 
     } 
    } 
} 

工作演示@http://jsfiddle.net/roberkules/JFEMH/

+0

爲清晰和jsfiddle ...謝謝 – 2011-05-24 13:55:15

+0

+1好,清晰,簡潔。 – tjameson 2011-05-24 15:38:06

1

我會推薦使用這個JSON擴展injson。它允許您使用JQuery在JSON對象中搜索鍵。

3

您可以使用jQuery來解析JSON

$.ajax({ 
    type: "POST", 
    url: "../JSON Source", 
    success: function(msg) { 
    var obj=jQuery.parseJSON(msg); 
    if(obj.debug== "on"){ 
     //do anything 

。 。 。 。 。

2

您可以遞歸地迭代到給定對象內的所有對象。

s = ""; 

    function recursiveSearch(obj, name){ 
     if(typeof(obj)==="object" { 
     for(var key in obj) { 
      if (obj.hasOwnProperty(key)) { 
       s += ":" + recursiveSearch(obj[key], name); 
      } 
     } else if(typeof(obj["name"] != 'undefined') { 
     s += ":" + obj["name"]; 

    } 

輸出將與鍵 「name」

+0

注意在這種情況下,如果「名稱」是對象類型,它們將被忽略。 – 2011-05-24 13:19:24

1

您可以使用DefiantJS(http://defiantjs.com)來代替編寫自定義搜索功能,從而啓用JSON結構上的查詢功能XPath表達式。例如:

var data = { 
    "widget": { 
     "debug": "on", 
     "window": { 
      "title": "Sample Konfabulator Widget", 
      "name": "main_window", 
      "width": 500, 
      "height": 500 
     }, 
     "image": { 
      "src": "Images/Sun.png", 
      "name": "sun1", 
      "hOffset": 250, 
      "vOffset": 250, 
      "alignment": "center" 
     }, 
     "text": { 
      "data": "Click Here", 
      "size": 36, 
      "style": "bold", 
      "name": "text1", 
      "hOffset": 250, 
      "vOffset": 100, 
      "alignment": "center", 
      "onMouseUp": "sun1.opacity = (sun1.opacity/100) * 90;" 
     } 
    } 
    }, 
res = JSON.search(data, '//image[name]'); 

console.log(res[0].name); 

這裏是一個工作小提琴:
http://jsfiddle.net/hbi99/CRTz9/

DefiantJS與「搜索」的方法擴展了全局對象JSON並返回與所述匹配的陣列(如果沒有找到匹配結果空數組) 。