Javascript 在JSON中搜索对象

Javascript 在JSON中搜索对象,javascript,json,Javascript,Json,这是我的JSON字符串。现在我想在这个JSON中搜索名称,然后显示结果 我建议使用这个JSON扩展。它允许您使用JQuery搜索JSON对象中的键。您可以使用JQuery解析JSON {"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "h

这是我的JSON字符串。现在我想在这个JSON中搜索名称,然后显示结果

我建议使用这个JSON扩展。它允许您使用JQuery搜索JSON对象中的键。

您可以使用JQuery解析JSON

{"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;"
    }
}}    
。 . . .
.

您可以对给定对象中的所有对象进行递归迭代

 $.ajax({
    type: "POST",
    url: "../JSON Source",
    success: function(msg) {
    var obj=jQuery.parseJSON(msg);
    if(obj.debug== "on"){
        //do anything
输出将是以冒号分隔的值,键为“name”

遍历键: (加强Amit Gupta的回答)

工作演示@

const数据={
“小部件”:{
“调试”:“打开”,
“窗口”:{
“标题”:“示例Konfabulator小部件”,
“名称”:“主窗口”,
“宽度”:500,
“高度”:500
},
“图像”:{
“src”:“Images/Sun.png”,
“名称”:“sun1”,
“hOffset”:250,
“vOffset”:250,
“对齐”:“中心”
},
“文本”:{
“数据”:“单击此处”,
“尺寸”:36,
“风格”:“粗体”,
“名称”:“text1”,
“hOffset”:250,
“vOffset”:100,
“对齐”:“中心”,
“onMouseUp”:“sun1.opacity=(sun1.opacity/100)*90
}
}
}
让结果=[];
getNames(数据,“标题”);
document.write(“结果:+result.join(,”);
函数getNames(obj,name){
for(obj中的var键){
if(对象hasOwnProperty(键)){
如果(“对象”==typeof(对象[key])){
getNames(obj[key],name);
}else if(key==name){
结果.推送(obj[键]);
}
}
}

}
您可以使用definatjs()来启用对带有XPath表达式的JSON结构的查询,而不是编写自定义搜索函数。例如:

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]);
            }
        }
    }
}
这是一把小提琴:


DefiantJS使用方法“search”扩展了全局对象JSON,并返回一个包含匹配项的数组(如果没有找到匹配项,则返回空数组)。

image name?文本名?或者窗口名?有名字吗。。。在整个json对象中,请使用一些代码说明来阐明您的目的。在本例中,如果“name”是对象类型,它们将被忽略。这不再是一个有效的工具,至少不再是了。小提琴似乎没有包含
违抗TJS
库:
类型错误:JSON.search不是一个函数
@cjbarth自从我的原始帖子以来,我已经更新了的网站。执行此操作时,我忘记在服务器上添加违抗lib(至少是旧路径),因此,来自JSFIDLE的路径无效。我已经更新了路径以更正一个,并重新保存了小提琴,现在它可以正常工作了。感谢您的“提醒”,并对断开的链接表示歉意:-)同时,DefiantJS网站是最新的,有可能有用的文档和测试区域。
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]);
            }
        }
    }
}
    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 );