如何使用jQuery访问这些奇怪的JSON项?

可能重复:
选择键中带冒号的JSON对象

如果这是一个重复的问题,我道歉。 我搜索过,我真的做到了!

我想要实现的是一个简单的日期重新格式化为更好的东西,如“2012年3月9日星期五”。 我很乐意使用众多方便的jQuery插件中的一个将现成的“pubDate”值解析为更有用的东西。 不幸的是,有些力量阻止我导入任何其他脚本,包括jQuery UI。 我的上司强制要求的页面模板导入了jQuery,就是这样。

我的JSON数据包含以下代码段:

"items": [ { "title": "blah blah", "link": "http://url.blah.com", "category": "category blah", "pubDate": "Fri, 09 Mar 2012 16:16:05 -0500", "y:published": { "hour": "21", "timezone": "UTC", "second": "5", "month": "3", "month_name": "March", "minute": "16", "utime": "1331327765", "day": "9", "day_ordinal_suffix": "th", "day_of_week": "5", "day_name": "Friday", "year": "2012" }, "y:id": { "permalink": "true", "value": null }, "y:title": "blah blah", "description": "more blah blah" } 

如果我使用$ .each循环“items”,如何在“y:published”中检索内容的值?

显然是类似的东西

 items.y:published.day_name 

由于结肠不起作用。 唉,我不是这个内容的创建者(它实际上是来自Yahoo Pipe的JSON提要,可能会解释“y:”); 我只是负责操纵它。 根据我的阅读,“y:blahblah”条目是非标准的JSON(?),可能不是通过.getJSON解析的,在这种情况下我搞砸了。 (子问题:这个评估是否正确?)

(这就是我在这里覆盖我所有的基础:将Yahoo Pipe输出从JSON更改为RSS / XML完全消除了“y:published”节点,所以这不是一个选项。)

提前致谢。 我没有骄傲; 我甚至会欣赏最前沿的简单解决方案,只要它可以用直接js或jQuery完成。

更新:以创纪录的时间回答! 感谢所有贡献的人。

解决方案:

 var niceDate = singleItem['y:published'].day_name + ', ' + singleItem['y:published'].month_name + ' ' + singleItem['y:published'].day + ', ' + singleItem['y:published'].year; 

items是一个数组,因此要获取第一个项目,请使用items[0]

然后,要访问该项目上具有无效标识符名称的属性,您可以使用括号表示法,因此:

 console.log(items[0]["y:published"].hour); // 21 

在JavaScript中,您可以通过两种方式访问​​对象属性:使用点分表示法和文字(例如, foo.bar ),或使用括号表示法和字符串( foo["bar"] )。 这两者是完全可互换的,但是使用字符串forms,属性名称不必符合JavaScript标识符文字的规则。

object["prop"]等同于object.prop ,但前者不限于有效的JavaScript标识符。 (JavaScript中的所有属性名称都是内部的字符串。后一种forms是为了方便,但如上所述,并不总是有效。)

快乐的编码。