如何从 JSON 对象读取密钥

How to read keys from JSON object

本文关键字:读取 密钥 对象 JSON      更新时间:2023-09-26

我有以下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的键。

例如,如果我搜索"杰米斯有史以来最好的圣诞节",我想返回相应的tvdb_id

这样的事情会有帮助吗?

function findKey(obj, value) {
  var key;
  _.each(obj, function (v, k) {
    if (v === value) {
      key = k;
    }
  });
  return key;
}

我该如何实现它?(JSON新手)

在您的示例中,您拥有的值 key ,因此只需使用它来访问您想要的属性。

var somevalue = 'Jamies Best Ever Christmas',
    tvdb_id = jsonobj[somevalue].tvdb_id;

在现代浏览器(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;
}

看起来您正在使用下划线.js。

盖比的回答应该符合要求。但是,如果您正在寻找部分匹配,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);
    });
}