【问题标题】:Cannot Decode JSON API response无法解码 JSON API 响应
【发布时间】:2014-10-20 17:08:52
【问题描述】:

我为我的运费报价系统构建了一个 API。我给它提供值,然后我得到报价。它工作正常,但我无法解码 JSON 响应。我得到一个 NULL 响应,但我不确定是怎么回事。根据验证者,JSON 是正确的。

所以我基本上做的是在一侧编码一个 PHP 数组,我想在另一侧使用浏览器和 PHP 解析它。但是,我得到一个 NULL 响应。

这是 JSON。如果您需要更多,请告诉我。

{"carrier":"R&L Carriers","charge":"99.13","service_days":"Wednesday Oct. 22, 2014"}

我只是想解码它以便解析它。如果有其他解析方式请告诉我。

另外,我搜索了 SOF,人们在这里遇到的类似问题对我没有帮助。

这是我用来生成 JSON 的代码。

    <?php
    //include ('mysql_connect.php');

    $result = mysql_query('select * from quote where user_id = "'.$user_id.'" order by netCharge asc limit 1');

    if (!$result) {
        die('Could not query:' . mysql_error());
    }

    if (!$result) echo mysql_error();

    $api_data = array();
    $api_count = '0';
    while ($row = mysql_fetch_array($result, MYSQLI_ASSOC)) {

    $api_data[carrier] = $row['carrier'];
    $api_data[charge] = $row['netCharge'];
    $api_data[service_days] = $row['serviceDays'];

    $api_count++;

    }

    $api_data = json_encode($api_data);

    print_r($api_data);

    ?>

这就是我用来获取 JSON 数据的方法:

    <?php

    $input = file_get_contents('api_request.php?dest_zip=66101&weight=200&class=50&ltl_shipment=X&Residential_Delivery=X');
    echo $input;

    $obj = json_decode($input);
    var_dump($obj);

    ?>

【问题讨论】:

  • 你将在哪里解码它?在使用javascript的浏览器中?还是在服务器端使用 PHP?需要更多详细信息。
  • 我会使用 PHP 来解码。
  • PHP 的json_decode() 不起作用?还是 JSON 没有像您预期的那样从一个地方传递到另一个地方?
  • 'json_decode()' 不起作用。我真正想做的就是解析这个响应。
  • 4 = JSON_ERROR_SYNTAX。行动。请粘贴您的所有代码,以便我们为您提供帮助。

标签: php json parsing


【解决方案1】:

您是否尝试过以下方法

    $array = json_decode($data, true);

【讨论】:

  • 绝对有。没有运气。
  • json_encode() 的输出不是你需要的结果吗?你能添加你期望的输出吗?
  • 您提供的代码将给出的结果。只是一个 PHP 数组。
  • 我认为您应该发布构建 json 数据的代码部分。
【解决方案2】:

您的回复中有一个额外的&lt;/div&gt;

删除 div 使其成为有效的 JSON,解码功能将起作用。

http://trumrates.com/trumrates/rate/quote/signin/api_request.php?dest_zip=66101&weight=200&class=50&ltl_shipment=X&Residential_Delivery=X

产量:

{"carrier":"R&L Carriers","charge":"99.13","service_days":"Wednesday Oct. 22, 2014"} </div>

【讨论】:

  • 以前没有发生这种情况。但是我删除了。
  • 所以还是不行?我能够运行:$test = '{"carrier":"R&amp;L Carriers","charge":"99.13","service_days":"Wednesday Oct. 22, 2014"}'; $obj = json_decode($test); var_dump($obj); 并获得预期的结果。我确实注意到,如果未设置会话 cookie,您的 URL 会有几个重定向。
【解决方案3】:

总结

内置函数json_decode (see doc) 应该会有所帮助。根据官方文档,NULL is returned if the JSON cannot be decoded or if the encoded data is deeper than the recursion limit.

我怀疑您读取的 JSON 字符串实际上与 PHP 读取的不同。 请确保该字符串不是 HTML 转义的。 JSON 中的键和值应该用双引号括起来,这一点非常重要。单引号是 JSON 格式错误,可能会被认为是语法错误。

示例

为了做一个好的演示,我将json字符串放入文件中,然后使用test.php对其进行解码。

example.json:

{"carrier":"R&L Carriers","charge":"99.13","service_days":"Wednesday Oct. 22, 2014"}

test.php:

<?php

$input = file_get_contents('example.json');
echo $input;
// {"carrier":"R&L Carriers","charge":"99.13","service_days":"Wednesday Oct. 22, 2014"}

$obj = json_decode($input);
var_dump($obj);
// object(stdClass)#1 (3) {
//   ["carrier"]=>
//   string(12) "R&L Carriers"
//   ["charge"]=>
//   string(5) "99.13"
//   ["service_days"]=>
//   string(23) "Wednesday Oct. 22, 2014"
// }

【讨论】:

  • 希望对我来说那么容易。我做你所做的,但使用一个变量而不是实际的 JSON。只需获得一个大的“NULL”。
  • 您使用的是什么 PHP 版本。确保支持json_decode。其次,在json_decode 之前添加一行error_reporting(E_ALL);。我想出了点问题。
  • 你如何得到你的 json 结果?您确定,您将纯 json 数据提供给 json_decode,并且它不包含任何“额外”字符吗? (标题、错误消息等?)
  • 这就是我所做的,它可能是完全错误的。我采用 PHP 数组并对其进行编码。然后 echo 或 print_r 那个 JSON。然后我使用不同的文件来“file_get_contents”那个 JSON 并将它放入一个变量中。接下来是'json_decode',它导致NULL。如果我检查 JSON 上的元素,我看到的只是文本和周围的主体(什么都不做)。
  • 我如何确保它没有被 HTML 转义?
【解决方案4】:

在编写代码时,我使用“Enter”在代码行之间留出空格。出于某种原因,它转换为 JSON,这就是它不起作用的原因。我刚刚删除了文件中所有多余的空行,它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 2022-01-12
    • 2017-05-08
    • 2021-09-17
    • 2016-03-29
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    相关资源
    最近更新 更多