2011-05-24 155 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并返回与所述匹配的阵列(如果没有找到匹配结果空数组) 。