我们说我有下一个JSON文件:
{
"shows": [
{
"name": "House of cards",
"rating": 8
},
{
"name": "Breaking bad",
"rating": 10
}
]
}
我想通过它的名字访问节目的评级。像这样:
var rating = data.shows["House of cards"].rating;
这可能吗?或类似的东西? 非常感谢!
答案 0 :(得分:1)
仅通过反序列化该JSON样本,您将不会有这种哈希样式访问。
也许您可以重新制定数据如何序列化为JSON并使用对象文字甚至是节目:
{
"shows": {
"House of cards": {
"rating": 8
}
}
}
您仍然可以使用Object.keys(...)
获取一系列演出键:
Object.keys(x.shows);
或者您甚至可以在反序列化JSON后更改结构:
var x = { shows: {} };
for(var index in some.shows) {
x.shows[some.shows[index].name] = { rating: some.shows[index].rating };
}
// Accessing a show
var rating = x.shows["House of cards"].rating;
我建议你应该更好地进行转换并获得使用纯JavaScript访问节目的好处,而不是必须迭代整个show数组才能找到它。
当你使用对象文字时,你正在访问像字典/哈希表这样的属性,它不会在幕后使用任何搜索功能。
OP关注如何在显示关联数组/对象而不是常规数组时迭代显示:
Object.keys(shows).forEach(function(showTitle) {
// Do stuff here for each iteration
});
或者...
for(var showTitle in shows) {
// Do stuff here for each iteration
}
这是关于jsFiddle的工作示例:http://jsfiddle.net/dst4U/
答案 1 :(得分:0)
尝试
var rating = {
"shows": [
{
"name": "House of cards",
"rating": 8
},
{
"name": "Breaking bad",
"rating": 10
}
]
};
rating.shows.forEach(findsearchkey);
function findsearchkey(element, index, array) {
if( element.name == 'House of cards' ) {
console.log( array[index].rating );
}
}
答案 2 :(得分:0)
var data = {"shows": [{"name": "House of cards","rating": 8},{"name": "Breaking bad","rating": 10}]};
var shows = data.shows;
var showOfRatingToBeFound = "House of cards";
for(var a in shows){
if(shows[a].name == showOfRatingToBeFound){
alert("Rating Of "+ showOfRatingToBeFound+ " is " +shows[a].rating);
}
}