我正在尝试处理rss feed的json版本,但我需要访问标记为“data.channel.item”的数组。我怀疑因为这个名称似乎与javascript中的保留字项冲突,该脚本不能仅使用这个特定的json文件。它确实适用于其他情况。
有没有办法使用“项目”,但以某种方式逃脱它? (是的,我是一个javascript新手)
这是脚本(jquery)
<script>
$(document).ready(function(){
$.getJSON("http://example.com/jsonBuzz.php?callback=?",
function(data){
$.each(data.channel.item, function(i,item){
$("#results").append('<li><h1>'+item.title+'</h1></li>');
});
});
});
</script>
json的删节版本:
{"@attributes":{"version":"2.0"},"channel":{"lastBuildDate":"Mon, 11 Jan 2010... ..."generator":"Blogger","item":[{"guid":"tag:blogger.com,...
答案 0 :(得分:7)
将键放在双引号中将允许您使用保留字 - 事实上,它必须是有效的JSON(请参阅http://json.org/)。但是,这不是真正的问题,因为“item”不是JavaScript中的保留字(请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words作为一个可能的参考)。
您已获得item:title
,而不是item.title
或item["title"]
,这两种方式都是访问对象属性的正确方法。
答案 1 :(得分:0)
对于记录:事实证明,问题不在于javascript代码。在评论中受到问题(Andy E)的启发,我发现了如何捕获javascript错误并确定json未正确括在括号中或以“;”结尾。
这是一个PHP问题。 PHP有一个有用的函数json_encode,它将PHP对象转换为json。
然而,作为json的新手,我认为这已经准备好了。我不知道它需要包含几个额外的字符。我修改了代码,现在按计划运行。
以下是其他人可能认为有用的PHP代码。这是我在第一篇文章中通过jquery $ .getJSON检索的php文件:
<?php
header('Content-Type: text/javascript; charset=utf8');
header('Access-Control-Allow-Origin: http://www.example.com/');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
$file='rss.xml';
$arr = simplexml_load_file($file);//this creates an object from the xml file
$json= '('.json_encode($arr).');'; //must wrap in parens and end with semicolon
print_r($_GET['callback'].$json); //callback is prepended for json-p
?>