PHP:JSON格式输出为一个长单行

时间:2013-02-24 23:09:43

标签: php json api

这是我的PHP脚本。

do2:locu alexus$ cat venuesearch.php 
<?php

$KEY='XXXXXXXXXXXXXXX';
$URL='http://api.locu.com/v1_0/venue/search/?api_key=';

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $URL.$KEY);
curl_setopt($ch, CURLOPT_HEADER,0);

print_r(json_decode(curl_exec($ch),TRUE));

?>
do2:locu alexus$ 

locu服务以JSON格式提供输出。当我运行脚本时,我得到所有输出都是长单行。

输出样本:

do2:locu alexus$ php venuesearch.php 
{"meta": {"cache-expiry": 3600, "limit": 25}, "objects": [{"categories": ["restaurant"], "country": "United States",.......... 

我错过了什么?如何访问每个变量?将它转换成XML可能有意义吗?

* UPDATE * :在PHP: json_decode - Manual的示例#1中显示格式化输出,如果我使用true然后我得到数组,我就不会得到格式输出也不是数组。

2 个答案:

答案 0 :(得分:2)

尝试添加:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

执行前。

看起来执行只是打印响应而不是将其作为字符串返回以供json_decode处理。

答案 1 :(得分:2)

您应该查看原始数据:

$json = curl_exec($ch);
var_dump($json);

只有在API返回json编码的json字符串时才能进行所描述的输出:

"{\"meta\": {\"cache-expiry\": 3600, \"limit\": 25}, \"objects\": [{\"categories\": [\"restaurant\"], \"country\": \"United States\",.......... '

(注意外部引号,它们是字符串的一部分)

这非常奇怪,绝对是API中的一个错误,但解决它的唯一方法是解码它两次:

$data = json_decode(json_decode($json));

修改:忘了Stegrex has figured it out