jQuery访问JSON对象

9

如何使用jQuery访问对象字面量中项目的名称?

例如,我该如何读取以下内容中的"title"、"link"、"media"等:

{
    "title": "What we do in our free time...",
    "link": "http://www.flickr.com/photos/tnhimmies/4042938515/",
    "media": {"m":"http://farm3.static.flickr.com/2572/4042938515_3a00561320_m.jpg"},
    "date_taken": "2009-10-24T03:48:10-08:00",
    "description": "<p><a href=\"http://www.flickr.com/people/tnhimmies/\">Darlene, TN Persians (www.tnpurrs.com)<\/a> posted a photo:<\/p> <p><a href=\"http://www.flickr.com/photos/tnhimmies/4042938515/\" title=\"What we do in our free time...\"><img src=\"http://farm3.static.flickr.com/2572/4042938515_3a00561320_m.jpg\" width=\"240\" height=\"230\" alt=\"What we do in our free time...\" /><\/a><\/p> <p>Tennessee Persians<br /> <a href=\"http://www.tnpurrs.com\" rel=\"nofollow\">www.tnpurrs.com<\/a><\/p>",
    "published": "2009-10-25T18:28:36Z",
    "author": "nobody@flickr.com (Darlene, TN Persians (www.tnpurrs.com))",
    "author_id": "66405213@N00",
    "tags": "cat persian tnpurrs"
},

5
顺便提一下,它不是一个“关联数组”,而是一个“对象字面量”。http://is.gd/4BdvZ - Christian C. Salvadó
5个回答

21

你也可以使用 $.each 函数:

var obj = { one:1, two:2, three:3, four:4, five:5 };

$.each(obj, function(key, value) {
  //..
});

如果您选择使用for...in语句的方式,我建议您检查属性是否直接存在于被迭代的对象上,因为如果Object.prototype被扩展,您可能会遇到一些问题
for(var key in obj) {
  if (obj.hasOwnProperty(key)){
    // value = obj[key];
  }
}

9
for (var key in json) {
  // ...
}

(这是标准的JavaScript,不是jQuery特定的)

这是正确的,但就像@CMS在他的答案中提到的那样,总是检查key是否是json对象的属性而不是原型的属性,否则你可能会遇到问题。只需检查if(json.hasOwnProperty(key)) { //do stuff };即可。 - Usman

2
在您的情况下,这根本不是一个数组!您想要循环遍历对象的属性。
JavaScript 也并不真正支持关联数组...请参见 http://www.hunlock.com/blogs/Mastering_Javascript_Arrays Zed 的回答很完美,我想补充一点。
alert(json[key]);

在 for 循环中,如果你想知道如何获取属性的值。谢谢。

0

如果你想的话,可以不使用每个循环来访问。

var obj = JSON.parse(data);
var title  = obj[0].title;

0
var testObject = {
    "title": "What we do in our free time...",
    "link": "http://www.flickr.com/photos/tnhimmies/4042938515/",
    "media": {"m":"http://farm3.static.flickr.com/2572/4042938515_3a00561320_m.jpg"},
    "date_taken": "2009-10-24T03:48:10-08:00",
    "description": "<p><a href=\"http://www.flickr.com/people/tnhimmies/\">Darlene, TN Persians (www.tnpurrs.com)<\/a> posted a photo:<\/p> <p><a href=\"http://www.flickr.com/photos/tnhimmies/4042938515/\" title=\"What we do in our free time...\"><img src=\"http://farm3.static.flickr.com/2572/4042938515_3a00561320_m.jpg\" width=\"240\" height=\"230\" alt=\"What we do in our free time...\" /><\/a><\/p> <p>Tennessee Persians<br /> <a href=\"http://www.tnpurrs.com\" rel=\"nofollow\">www.tnpurrs.com<\/a><\/p>",
    "published": "2009-10-25T18:28:36Z",
    "author": "nobody@flickr.com (Darlene, TN Persians (www.tnpurrs.com))",
    "author_id": "66405213@N00",
    "tags": "cat persian tnpurrs"
};

如果它是单个对象,那么你可以通过 testObject.tags 或 testObject.title 这样的方式访问它。
或者你可以通过迭代来访问。
$.each(obj,function(key,value){
///
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接