【问题标题】:Why doesn't PHP function json_decode() work on strings formatted in double quotes?为什么 PHP 函数 json_decode() 不能处理双引号格式的字符串?
【发布时间】:2023-01-09 01:14:32
【问题描述】:

为什么 php 中的 json_decode() 函数在下面的代码中不返回任何内容?

<?php
$str = "[['123'],['123']]";
print_r(json_decode($str));
?>

Result:
Literally white screen of death. Cause Im running this on browser.

笔记!

如果我将存储在变量 $str 中的字符串从双引号更改为单引号,json_decode() 将按预期工作。

前任(注意前面一段代码中的单引号/双引号与下面这段代码的比较):

<?php
$str = '[["123"],["123"]]';
print_r(json_decode($str));
?>

Result:

Array ( [0] => Array ( [0] => 123 ) [1] => Array ( [0] => 123 ) )

预先感谢您的时间和精力!上面写的代码是 .php 文件中唯一存在的东西,这意味着没有更多的代码作为上面的脚本示例的一部分编写。

【问题讨论】:

  • 在这里查看(例如):json.org/json-en.html“值可以是双引号中的字符串,也可以是数字,可以是 true 或 false 或 null,也可以是对象或数组。”“字符串是零个或多个 Unicode 字符的序列,用双引号括起来,使用反斜杠转义。字符表示为单个字符串。字符串非常像 C 或 Java 字符串。”
  • JSON RFC 明确定义分隔符为只要双引号字符。因此,您的第一个示例字符串不是有效的 JSON。

标签: php arrays json


【解决方案1】:

在 JSON 语法中,字符串必须用双引号括起来,单引号无效。

如果未能解码字符串,json_decode() 返回NULL。您可以使用 json_last_error_msg() 检索错误消息:

$ret = json_decode($str);
if(is_null($ret)) echo(json_last_error_msg());

输出 :

语法错误

【讨论】:

  • 通过结合您的代码并阅读上面 Alex Howansky 的回答,我得出结论,我必须将字符串内容更改为对 json 格式有效。谢谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 2011-03-27
相关资源
最近更新 更多