2014-04-01 74 views
1

如何阅读键我有以下的JSON(部分):从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

你JSON是无效的。 '{{'不允许。 – Quentin

+0

'JSON.parse'将JSON字符串转换为JS对象 –

+0

dupe:http://stackoverflow.com/questions/3068534。 –

回答

5

在你的榜样的价值,你有key,所以只是用它来访问你想要的属性..

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

谢谢,不完全是我正在寻找,但有帮助。改编我的问题:http://stackoverflow.com/questions/22797839/json-file-read-with-select2-plugin – Alex

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; 
} 
+1

如果OP使用Underscore,'_.keys'应该适合账单。它在可用时使用本地'keys()'方法。 –

+0

yep,我的坏,没有注意到一个!接得好! – pj013

0

它看起来像你使用Underscore.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); 
    }); 
}