【问题标题】:PHP json_decode returns null on valid stringPHP json_decode 在有效字符串上返回 null
【发布时间】:2018-02-27 23:50:36
【问题描述】:

我有以下代码:

$option = $this->request->post['option'];

var_dump($option);
echo "<br>";
var_dump(json_decode($option));

转储显示:

string(118) "{'product_option_id':276, 'product_option_value_id':132, 'name':'Цветове', 'value':'Бял', 'type':'select'}"

还有第二个(json_decode):

NULL

为什么无法解析字符串?

编辑: 现在我的 json 看起来像这样:

string(205) "{"product_option_id": 280, "product_option_value_id": 133, "name": "Цветове", "value": "Бежов", "type": "select"}" 

我将这个添加到我的代码中:

switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - No errors';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
        default:
            echo ' - Unknown error';
        break;
    }

我返回语法错误,格式错误的 JSON

【问题讨论】:

标签: php json


【解决方案1】:

看到这个答案:https://stackoverflow.com/a/4162651/174326

如果你用双引号将你的字符串包裹在你的 JSON 字符串中,它会起作用: json_decode('{"product_option_id":276, "product_option_value_id":132, "name":"Цветове", "value":"Бял", "type":"select"}')

【讨论】:

  • 我已经完成了,结果还是一样,我的第一个转储现在看起来像这样:string(196) "{"product_option_id":276, "product_option_value_id":132, "name":"Цветове", "value":"Бял", "type":"select"}"
【解决方案2】:

JSON 中不允许使用单引号,只能使用双引号。做

$option = str_replace ("'", '"', $option);

在致电json_decode之前。

【讨论】:

  • 现在看起来像这样:string(196) "{"product_option_id":276, "product_option_value_id":132, "name":"Цветове", "value":"Бял", "type":"select"}" ,但结果仍然为空
【解决方案3】:

参考Convert a string to JSON object php

你可以使用

$result = (array) json_decode($option);

$result = json_decode($option, true);

【讨论】:

  • 当您将 null 转换为数组时,您会收到 array(0) {}
猜你喜欢
  • 2012-07-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多