使用PHP&帮助消费JSON提要json_decode

时间:2009-07-29 14:19:10

标签: php jquery ajax json

我遇到了为客户端使用特定Feed的问题。他们给了我一个远程URL,响应是一个JSON字符串,如下所示:

{"affiliate": [
{"ID":"1", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"},
{"ID":"2", "EXAMPLE":"EXAMPLE", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"},
{"ID":"3", "TITLE":"EXAMPLE", "COUNTRY":"EXAMPLE", "NETWORK":"EXAMPLE", "PRIMARY":"EXAMPLE"}
]}

出于示例目的,我缩小了Feed以显示格式,但实际上有数百个附属机构。无论如何,我想使用PHP json_decode,因为最后,我需要在关联数组中使用这些联属会员。

我有这样的东西,但我最终得到了原始字符串,而json_decode实际上并没有将它解析为关联数组。

$request_url = "http://exampleurl.com/feed"; //returns feed like above

$json = file_get_contents($request_url, true); //getting the file content

$decode = json_decode($json, true);

print_r($decode);

似乎我需要在Feed中维护“\ n”字符,但在使用时会被删除:

file_get_contents

无论如何,我想你知道我在追求什么,我只是不确定我做错了什么。我提前感谢你的帮助。我已经尝试过将jquery与jsonp一起使用,但这种方式会更理想,因为我之后需要对数组进行排序,并且它不需要是异步的。

橡子

2 个答案:

答案 0 :(得分:5)

您的Feed可能包含unicode文字。尝试:

$decode = json_decode(addslashes($json), true)

更新

解决了这个问题。 json数据中存在\'s的实例json_decode无法正确处理。要解决此问题,您需要双倍转义\。这就是我所做的。

<?php
error_reporting(E_ALL);
$request_url = 'http://midas.glam.com/publisher_directory_data?network=glam&country=US&publish=Y';

$json = file_get_contents($request_url);
$json = str_replace('\\', '\\\\', $json);

$decode = json_decode($json, true);

var_dump($decode);

答案 1 :(得分:3)

您的数据Feed会使用反斜杠(例如\')转义单引号(撇号)。 JSON规范并未说明应该这样做,因此PHP行为不正确。

请参阅:http://bugs.php.net/bug.php?id=42708

您可以尝试将所有\'替换为':

$json = str_replace('\\\'', "'", $json);

在调用json_decode之前。