3

这是我的 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 是否有意义?

* 更新 * : .. 在PHP 的示例 #1:json_decode - 手动显示格式化输出,如果我使用true然后我得到数组,我既没有得到格式化输出也没有得到数组。

4

2 回答 2

3

尝试添加:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

在执行之前。

看起来执行只是简单地打印响应,而不是将其作为要由 json_decode 处理的字符串返回。

于 2013-02-24T23:22:34.733 回答
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 已经弄清楚了

于 2013-02-24T23:23:20.923 回答