无法从json访问数据

时间:2013-05-01 09:58:49

标签: javascript html json

我遇到了JSON问题。我用PHP制作了这个,我将它发送到我的JavaScript,但我无法获得这些值。

[
   {
      "book":[
         {
            "dir":"extract\/pg1065.epub"
         },
         {
            "dir":"extract\/pg1065.epub\/1065\/0.css"
         },
         {
            "dir":"extract\/pg1065.epub\/1065\/1.css"
         },
   }

   {
      "book":[
         {
            "dir":"extract\/pg6130-images.epub"
         },
         {
            "dir":"extract\/pg6130-images.epub\/6130\/0.css"
         },
    }
]

我正在尝试使用

访问它
var obj =  JSON.parse(result);
alert(obj.book[0].dir[1]);

有人有什么想法吗?

4 个答案:

答案 0 :(得分:1)

首先你需要验证你的json,我已经验证了你的json它给出了错误。 在你的json dIr 是id。 您已为同一对象定义了3 dir id,这可能是错误。

答案 1 :(得分:0)

编辑:我错过了,但是第一条评论解释了你错过了书籍数组的结束方括号。添加它,你的好处。首先验证JSON。

你不需要做JSON.parse就可以了。

var data = <?php echo "Your generated JSON code"; ?>;

值得注意的是,您可以在PHP中创建数据结构,然后只需使用json_encode,然后就可以确定它是有效的JSON

var data = <?php echo json_encode($yourData); ?>;

您输出了一个数组,以便获得第一个对象,例如

var firstObj = data[0];

获得第一本书的第一个目录

var firstDir = data[0]["book"][0]["dir"];

答案 2 :(得分:0)

问题中显示的代码不是有效的JSON。每个book数组都缺少结束方括号,并且(感谢@punund)数组成员之间缺少逗号。正确的JSON就是这样:

[
   {
      "book":[
         {
            "dir":"extract\/pg1065.epub"
         },
         {
            "dir":"extract\/pg1065.epub\/1065\/0.css"
         },
         {
            "dir":"extract\/pg1065.epub\/1065\/1.css"
         }
      ]
   },

   {
      "book":[
         {
            "dir":"extract\/pg6130-images.epub"
         },
         {
            "dir":"extract\/pg6130-images.epub\/6130\/0.css"
         }
      ]
   }
]

您通常不应该直接打印JSON,而是在PHP中创建JSON对象,然后使用json_encode函数。以下PHP将为您的方案生成有效的JSON:

<?php

$result = array(
        (object)array("book" => array((object)array("dir" => "extract/pg1065.epub"),
                                      (object)array("dir" => "extract/pg1065.epub/1065/0.css"),
                                      (object)array("dir" => "extract/pg1065.epub/1065/1.css"))),
        (object)array("book" => array((object)array("dir" => "extract/pg6130-images.epub"),
                                      (object)array("dir" => "extract/pg6130-images.epub/6130/0.css")))
);


echo json_encode($result);

?>

答案 3 :(得分:0)

[
{
    "book": [
        {
            "dir": "extract/pg6130-images.epub"
        },
        {
            "dir": "extract/pg6130-images.epub/6130/0.css"
        }
    ]
},
{
    "book2": [
        {
            "dir": "extract/pg6130-images.epub"
        },
        {
            "dir": "extract/pg6130-images.epub/6130/0.css"
        }
    ]
}
]

您使用的JSON无效:http://jsonlint.com/对其进行排序!

现在你应该能够很好地获取数据了。