2013-05-01 65 views
0

我在使用JSON時遇到問題。我用PHP做了這個,並且把它發送給我的JavaScript,但我無法獲得這些值。無法從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" 
     }, 
    } 
] 

我試圖用

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

任何人訪問它有什麼想法?

+5

問題中的JSON不是有效的JSON:它缺少每本書的方括號。 – 2013-05-01 10:02:44

+1

另外,它在數組成員之間缺少逗號。 – punund 2013-05-01 10:04:10

+0

可能的重複[我有一個嵌套的數據結構/ JSON,我如何訪問特定的值?](http://stackoverflow.com/questions/11922383/i-have-a-nested-data-structure-json-我怎麼可以訪問一個特定的值) – 2013-05-01 10:04:18

回答

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"]; 
+0

OP是否需要解析JSON取決於他們如何得到它。 – 2013-05-01 10:06:12

+0

PHP與此有什麼關係? – LmC 2013-05-01 10:10:23

+0

OP使用PHP來生成他的JSON代碼,我正在展示如何以正確的格式在頁面上獲取它。 – Ally 2013-05-01 10:14:42

1

首先,您需要驗證您的JSON的第一個目錄,我已經驗證您的JSON提示錯誤。 在你的json dIr是id。 您已經爲相同的對象定義了3個目錄ID,這可能是錯誤。

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); 

?> 
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/排序吧!

現在您應該可以正常訪問數據了。