2011-04-26 92 views
3

这是一个小问题。我正在与一个JSON文件,看起来像这样:用PHP解析JSON数据

{"nodes": 
    [{"node": 
    {"Vocabulary name":"Bestseller Format", 
     "Term":"Hardcover Fiction", 
     "Bestseller1":"9780470227800", 
     "Bestseller2":"9781451617962", 
     "Bestseller3":"9781439167397", 
     "Bestseller4":"9781617750106", 
     "Bestseller5":"9780385533300", 
     "Bestseller6":"9780670022526", 
     "Bestseller7":"9781609530358", 
     "Bestseller8":"9780132358040", 
     "Bestseller9":"9780596159771", 
     "Bestseller10":"9780151014163", 
     "Bestseller11":"9780393334807", 
     "Bestseller12":"9780805090161"} 
    }] 
} 

而我想解析它在PHP中。我想出了一个脚本

<?php  
    $jsonurl = "http://www.xtracrunchy.com/pandpnewlook/?q=pandp/bestsellers"; 
    $json = file_get_contents($jsonurl,NULL, NULL, 0, 1000); 
    $json_output = json_decode($json,true); 

    $bestseller_array = $json_output[nodes][0][node]; 

    foreach ($bestseller_array as $key => $value) 
    { 
    print $key; 
    print " - "; 
    print $value; 
    print "<br />"; 
    } 

?> 

我希望能够当我运行此脚本是

词汇名,最终打造畅销书ISBN的有序列表,但唯一的输出我得到的 - 畅销书格式 术语 - 精装小说

当我添加打印计数($ bestseller_array);我只在数组中获得2个元素。

任何帮助,将不胜感激。

+0

你可以把代码放在代码标签中吗?并使一切可读...谢谢:D – fingerman 2011-04-26 22:56:51

+0

修正了我自己的格式。下一次,在每行代码前添加4个空格。 – Christian 2011-04-26 22:59:42

+0

谢谢@christian – fingerman 2011-04-26 23:00:41

回答

1

首先,我强烈建议你使用卷曲的,而不是file_get_contents()的,因为在some occasions,它不会工作。但既然这不是问题的一部分,我不会再谈这个问题。

其次,你正在使用未命名的文字常量,这是非常糟糕的。

$json_output[nodes][0][node]; 

应该是:

$json_output['nodes'][0]['node']; 

documentation here on why

最后,您在上面写的JSON字符串与该网址上返回的内容不匹配,并且该脚本按照预期在此“新”json上工作。

+0

谢谢。这实际上很有帮助。它仍然不起作用,但是这种指向我的方向是正确的。 – flakes 2011-04-26 23:19:58

1

@flakes,如果你访问在$ jsonurl你的网址,你只能得到:

{"nodes":[{"node":{"Vocabulary name":"Bestseller Format","Term":"Hardcover Fiction"}}]} 

你确定你不会错过从URL的东西吗?

0

服务器的输出与您的期望不符。

var_dump($json); 
//string(87) "{"nodes":[{"node":{"Vocabulary name":"Bestseller Format","Term":"Hardcover Fiction"}}]}" 

希望帮助...的