如何从JSON对象中读取键

时间:2014-04-01 21:40:16

标签: javascript json object

我有以下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新手)

3 个答案:

答案 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);
    });
}
相关问题