通过对象属性访问JSON数组

时间:2014-06-28 10:07:33

标签: javascript json

我们说我有下一个JSON文件:

{
  "shows": [
             {
               "name": "House of cards",
               "rating": 8
             },
             {
               "name": "Breaking bad",
               "rating": 10
             }
  ]
}

我想通过它的名字访问节目的评级。像这样:

var rating = data.shows["House of cards"].rating;

这可能吗?或类似的东西? 非常感谢!

3 个答案:

答案 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
}

更新2

这是关于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)

Fiddle

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);
    }
}