php json decode错误,一次有趣的 php json_decode error 分析
之前同事问了我一个有趣的问题,说为什么这个 json 字符串从缓存里读出来可以解析,但是作为一个 php 变量却解析错误呢?
先看一个我已经简化了的例子
$str = "\\";
$j = json_encode($str);
echo $j, PHP_EOL;
echo json_decode($j), PHP_EOL;
输出
"\\"
\
如果你直接把输出的 json 字符串赋值给一个 php 字符串变量的话,好玩的事情就发生了
$conf = <<
"\\"
EOD; // heredoc
// $conf = '"\\"'; // 单引号
// $conf = "\"\\\""; // 双引号
var_dump(json_decode($conf, true));
echo json_last_error_msg(), PHP_EOL;
输出
NULL
Control character error, possibly incorrectly encoded
你就会发现,不管怎么搞,json_decode 总是失败的,然后我慢慢的把 json 字符串抽茧剥丝,最后只剩下“\\”,发现问题出在这里。
乍一看,这个字符串并没有什么特别之处,但是在我把它 echo 之后,终于搞明白到底为什么一直 json_decode 失败了
$conf = <<
"\\"
EOD;
echo $conf,PHP_EOL;
输出
\
“\\” 这货被转义了,然后这就不再是一个正常的 json 字符串了,所以 json_decode 就会失败,那么才能让它正确的被 decode 呢?看下面这段代码
$conf = <<
"\\"
EOD; // nowdoc
var_dump(json_decode($conf, true));
echo json_last_error_msg(), PHP_EOL;
输出
string(1) "\"
No error
就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。
更多架构、PHP、GO相关踩坑实践技巧请关注我的公众号:PHP架构师
php json decode错误,一次有趣的 php json_decode error 分析相关推荐
- (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)...
原文地址:解决fasterxml中string字符串转对象json格式错误问题 com.fasterxml.jackson.databind.ObjectMapper mapper = new com ...
- composer出现Invalid credentials for ‘https://packagist.phpcomposer.com/packages.json’的错误
composer出现Invalid credentials for 'https://packagist.phpcomposer.com/packages.json'的错误 一.总结 一句话总结:出现 ...
- 解决特殊字符引起json解析错误--单引号、双引号转义
解决特殊字符引起json解析错误–单引号.双引号转义 这几天在做一个题库管理,遇到了一个问题,将后台的json数据传到前台用parse解析时,出现了一个错误: Uncaught SyntaxError ...
- luaError json解析错误1
JSON4Lua中的decode_scanString函数,从json字符串中解析出来的键或值,直接交由loadstring来处理了,这个地方针对大部分情况下的字符串解析是正常的,但针对含有转义字符的 ...
- Seata json decode exception, Cannot construct instance of `java.time.LocalDateTime`问题,有效解决!
seata版本:1.4.2 浏览过很多文章,尝试过很多方法,最终问题定位到Seata的序列化方式.详情参考: Seata json decode exception, Cannot construct ...
- python2 ‘ascii‘ codec can‘t encode / decode 错误
参考:Python 2.x 中的 'ascii' codec can't encode / decode 错误 用Python 2.x会经常碰到一个错误: UnicodeEncodeError: 'a ...
- php json语法错误,在PHP json_decode()中检测到错误的json数据?
在PHP json_decode()中检测到错误的json数据? 通过json_decode()解析时,我正在尝试处理错误的json数据. 我正在使用以下脚本: if(!json_decode($_P ...
- Android之升级OkHttp编译提示错误如下Using ‘body(): ResponseBody?’ is an error. moved to val
1 问题 升级okHttp库,编译项目错误如下 Using 'body(): ResponseBody?' is an error. moved to val 2 解决办法 原来的代码 val lis ...
- wampServer2.1错误(Could not execute menu item (internal error)
安装wampServer2.1后提示以下错误 Could not execute menu item (internal error) [Exception] Could not perform se ...
最新文章
- R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(分组颜色配置、位置配置)实战
- Tomcat 配置安装
- ubuntu20.04安装noetic版本ros
- iview中嵌套使用tabs注意事项
- IDEA和VS code设置默认换行符为LF
- 【免费毕设】PHP校园二手信息网站的设计与开发(源代码+论文)
- 《微店赚钱一册通 ——开店+营销+推广 实战全攻略》一一1.5 微店有哪些优势...
- C语言区分大小写字母
- GlobalMapper20脚本应用(数据批量自动化处理)
- redis的配置文件修改
- 工程师思维(简化版)——聪明人的10个工程思维
- ubuntu中 /usr、/var、/opt目录解析
- 几种聚类算法的对比实验
- Paper:自动驾驶领域SAE标准之《道路机动车辆驾驶自动化系统相关术语的分类和定义》官方英文原文翻译与解读(二)
- 高数考研归纳 - 微分学 - 中值定理
- Gitlab CI/CD:入门指南
- 理解回忆 李烨的机器学习
- 对自己现阶段职业规划的一些思考
- What's UTF-8?
- aac音乐下载分享-张学友-情歌岁月精选
热门文章
- minecraft java_Minecraft Java版 1.13发布
- java中.lpad_Oracle中Lpad函数和Rpad函数的用法
- Robust image stitching with multiple registrations之浅见
- 聪明人管理配电室,都是这样搞定的!
- 手机H5网站 支付宝、微信支付遇到的问题和注意事项
- 介绍SFP SFP+ QSFP+ XFP QSFP28
- 苹果7手机严重卡顿_为什么安卓机用久了会卡顿,苹果却不会?这一点决定手机卡不卡!...
- Revit开发 - “附加模块”中添加“外部工具”
- 阴阳师百闻牌如何在电脑上玩 阴阳师百闻牌模拟器玩法教程
- 2022新版Git教程 从入门到实战(三)Git分支管理