使用PHP解析JSON数据

3

这是一个有点初学者问题。我正在使用一个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个元素的数组。

任何帮助都将不胜感激。


你能用 code 标签放置代码吗?并且让所有内容易读... 谢谢 :D - fingerman
我自己修复了格式。下次,请在每行代码前添加4个空格。 - Christian
var_dump($bestseller_array); 会显示什么? - OZ_
尝试使用 print_r($json_output) \n http://php.net/manual/zh/function.print-r.php - fingerman
当我执行print_r时,我得到了以下结果:Array([nodes] => Array([0] => Array([node] => Array([词汇名称] => 畅销书格式[术语] => 精装小说)))))词汇名称 - 畅销书格式。 - flakes
不用等待,刚刚测试过了。这就是JSON源提供的所有信息。它没有像你的例子中那样提供ISBN列表。 - mario
3个回答

1

@flakes 如果你访问你的 $jsonurl 中的URL,你只会得到:

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

你确定你的URL没有漏掉什么吗?

1
首先,我强烈建议您使用CURL而不是file_get_contents(),因为在某些情况下,它可能无法正常工作。但由于这不是问题的一部分,我不会再进一步讨论。
其次,您正在使用未命名的文字常量,这是非常不好的做法。
$json_output[nodes][0][node];

应该是:

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

请在此处查看文档原因

最后,您上面编写的JSON字符串与该URL返回的内容不匹配,并且该脚本在这个“新”的JSON上按预期工作。


谢谢。这实际上非常有帮助。虽然它还不起作用,但这确实指引了我正确的方向。 - flakes

0

服务器输出结果与您预期不符。

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

希望这有所帮助...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接