json选择一个名为“item”的项目

时间:2010-01-13 03:59:24

标签: javascript jquery json

我正在尝试处理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,...

2 个答案:

答案 0 :(得分:7)

将键放在双引号中将允许您使用保留字 - 事实上,它必须是有效的JSON(请参阅http://json.org/)。但是,这不是真正的问题,因为“item”不是JavaScript中的保留字(请参阅https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words作为一个可能的参考)。

您已获得item:title,而不是item.titleitem["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
?>