【问题标题】:How to read keys from JSON object如何从 JSON 对象中读取密钥
【发布时间】:2014-04-01 21:40:15
【问题描述】:

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

【问题讨论】:

标签: javascript json object


【解决方案1】:

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

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

【讨论】:

【解决方案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;
}

【讨论】:

  • 如果 OP 使用下划线,_.keys 应该符合要求。它在可用时使用本机 keys() 方法。
【解决方案3】:

您似乎在使用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);
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2021-12-14
    • 2020-11-28
    • 2021-02-07
    相关资源
    最近更新 更多