2014-04-01 117 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); 
    }); 
}