如果这是一个重复的问题,我道歉。我搜索过,我真的做到了!
我想要实现的是一个简单的日期重新格式化为更好的东西,如“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;
答案 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标识符文字的规则。