如何解决在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\",\"vOffset\": 100,\"alignment\": \"center\",\"onMouseUp\": \"sun1.opacity = (sun1.opacity / 100) * 90;\"
}
}}
这是我的JSON字符串。现在我想在此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]);
}
}
}
}
工作演示@ http://jsfiddle.net/roberkules/JFEMH/
const 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\",\"vOffset\": 100,\"alignment\": \"center\",\"onMouseUp\": \"sun1.opacity = (sun1.opacity / 100) * 90;\"
}
}
}
let result = [];
getNames(data,\"title\");
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]);
}
}
}
}
,您可以使用Jquery解析JSON
$.ajax({
type: \"POST\",url: \"../JSON Source\",success: function(msg) {
var obj=jQuery.parseJSON(msg);
if(obj.debug== \"on\"){
//do anything
。
。
。
。
。
,您可以递归地迭代给定对象内的所有对象。
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\"];
}
输出将是用冒号分隔的值,其键为“名称”
,我建议使用此JSON扩展injson。它允许您使用JQuery在JSON对象中搜索键。
,您可以使用DefiantJS(http://defiantjs.com)而不是编写自定义搜索功能,该功能可以使用XPath表达式对JSON结构进行查询。例:
var data = {
\"widget\": {
\"debug\": \"on\",\"window\": {
\"title\": \"Sample Konfabulator Widget\",\"height\": 500
},\"image\": {
\"src\": \"Images/Sun.png\",\"alignment\": \"center\"
},\"text\": {
\"data\": \"Click Here\",\"onMouseUp\": \"sun1.opacity = (sun1.opacity / 100) * 90;\"
}
}
},res = JSON.search( data,\'//image[name]\' );
console.log( res[0].name );
这是一个工作的小提琴:
http://jsfiddle.net/hbi99/CRTz9/
DefiantJS使用方法\“ search \”扩展了全局对象JSON,并返回具有匹配项的数组(如果未找到匹配项,则为空数组)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。