【问题标题】:Help with consuming JSON feed with PHP & json_decode帮助使用 PHP 和 json_decode 使用 JSON 提要
【发布时间】:2009-07-29 14:19:09
【问题描述】:

我在为客户使用特定提要时遇到问题。他们给了我一个远程 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"}
]}

出于示例目的,我缩小了供稿以显示格式,但实际上有数百个附属公司。无论如何,我想使用 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);

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

file_get_contents

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

橡子

【问题讨论】:

  • 我注意到您更改了代码。我用正确的 print_r 运行了代码,它与示例数据一起工作得很好。你能提供你正在使用的提要吗?

标签: php jquery ajax json


【解决方案1】:

您的 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);

【讨论】:

  • 感谢您指出这一点,但这实际上是我的代码中的内容。对困惑感到抱歉。结果是 print_r 函数吐出原始 JSON 提要而不是关联数组。还有其他想法吗?
  • 更新了我的答案,可能不是问题,但值得一试。
  • 试过了,它只是吐出斜线和 JSON 字符串的其余部分。
  • 这是否与提要未包含在 () 或 [] 中的事实有关?
  • 当我将原始 xml 文件复制到字符串中时它工作正常,所以我认为问题出在file_get_contents
【解决方案2】:

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

见:http://bugs.php.net/bug.php?id=42708

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

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

在调用 json_decode 之前。

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2018-12-11
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多