我有以下JSON(截断):
{
"** Please contact a mod by posting on the forums **": {
"tvdb_id": "257937",
"last_updated": 1341780286,
"images": {
"poster": "http://zapp.trakt.us/images/posters/17288.jpg",
"fanart": "http://zapp.trakt.us/images/fanart/17288.jpg"
}
},
"Jamies Best Ever Christmas": {
"tvdb_id": "214161",
"last_updated": 1329701153,
"images": {
"poster": "http://zapp.trakt.us/images/posters/9126.jpg",
"fanart": "http://zapp.trakt.us/images/fanart/9126.jpg"
}
},
"Kuromajo-san ga Tooru!!": {
"tvdb_id": "257914",
"last_updated": 1395775431,
"images": {
"poster": "http://zapp.trakt.us/images/posters/15640.jpg",
"fanart": "http://zapp.trakt.us/images/fanart/15640.jpg"
}
},
"Arbesre Shavuout": {
"tvdb_id": "253960",
"last_updated": 1328789472,
"images": {
"poster": "http://zapp.trakt.us/images/posters/14058.jpg",
"fanart": "http://zapp.trakt.us/images/fanart/14058.jpg"
}
}
}
我想搜索一个值(现在从var
搜索)并找到返回tvdb_id
的密钥。
例如,如果我搜索“Jamies Best Ever Christmas”,我想返回相应的tvdb_id
。
这样的事情有帮助吗?
function findKey(obj, value) {
var key;
_.each(obj, function (v, k) {
if (v === value) {
key = k;
}
});
return key;
}
我该如何实施? (JSON新手)
答案 0 :(得分:5)
在您的示例中, 的值 key
,因此只需使用它来访问您想要的属性..
var somevalue = 'Jamies Best Ever Christmas',
tvdb_id = jsonobj[somevalue].tvdb_id;
答案 1 :(得分:2)
在现代浏览器(IE9 +,FF4 +,Chrome5 +,Opera12 +,Safari5 +)中,您可以使用内置的Object.keys方法:
var keys = Object.keys(myJsonObject);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
您也可以使用下面的那个:
var getKeys = function(obj){
var keys = [];
for(var key in obj){
keys.push(key);
}
return keys;
}
答案 2 :(得分:0)
您似乎正在使用Underscore.js。
Gaby的答案应该符合要求。但是,如果你正在寻找部分匹配,Underscore.js中有一些很酷的功能。考虑一下:
var mappedResults = _.map(jsonobj, function(key, value, list) {
return {name:key, tvdb_id:value.tvdb_id};
});
这将为您提供一组对象,每个对象都带有标题和tvdb id。
要执行搜索,您可以编写如下函数:
function getMatchingIds(searchterm) {
return _.filter(mappedResults, function(entry) {
return (entry.name.indexOf(searchterm) != -1);
});
}