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

时间:2012-03-10 07:04:25

标签: jquery json pipe yahoo

  

可能重复:
  Selecting a JSON object with a colon in the key

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

我想要实现的是一个简单的日期重新格式化为更好的东西,如“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;

2 个答案:

答案 0 :(得分:4)

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

快乐的编码。

答案 1 :(得分:1)

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

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

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

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