php json error,PHP 7.3 中的 JSON 错误处理

9ddd575cdf95ef9efa556d83d65d360c.png

PHP 7.3 为 json_encode() 和 json_decode() 函数增加的一个新特性使其更好的处理错误。这个特性「 RFC 」以 23 比 0 的投票结果被一致接受。让我们看一看在 PHP 7.2 及一下版本中是如何处理 JSON 错误的,以及 PHP 7.3 中新的改进。

背景

当前在 PHP7.2 版本中,如果要确定 JSON 是否无效,则必须使用 json_last_error() 函数来验证:

>>> json_decode("{");

=> null

>>> json_last_error();

=> 4

>>> json_last_error() === JSON_ERROR_NONE

=> false

>>> json_last_error_msg()

=> "Syntax error"

举个栗子,在 Laravel 中使用 Illuminate\Encryption\Encrypter 类检查以及确保调用 json_encode() 不会导致出错。

// 当我们获取到加密的数值时,我们会先用 base64_encode 处理

// 并且为我们要加密的数值创建用来验证的 MAC 值

// 最后我们会将三者组成的数组 JSON 格式化

$json = json_encode(compact('iv', 'value', 'mac'));

if (json_last_error() !== JSON_ERROR_NONE) {

throw new EncryptException('Could not encrypt the data.');

}

return base64_encode($json);

我们至少可以确定 JSON 编码/解码是否有错,但与抛出异常相比,它有点笨拙,它将错误代码和消息整齐的打包在一块。

虽然我们必须选择使用它,但是在 v7.3 版本中有一个很好的方法让你捕获和处理 JSON 异常——接下来让我们看看我们可以使用的新特性( flag 字面来翻就是标志、旗帜这些,但是此处感觉特性比较好,才疏学浅,请指正)。

PHP 7.3 中的抛出错误的特性

新的特性选项 JSON_THROW_ON_ERROR 可以使用 try/catch 重写此代码块,大约类似于如下内容:

use JsonException;

try {

$json = json_encode(compact('iv', 'value', 'mac'), JSON_THROW_ON_ERROR);

return base64_encode($json);

} catch (JsonException $e) {

throw new EncryptException('Could not encrypt the data.', 0, $e);

}

我想当你收到一些 JSON 数据而不用去深究和 json_last_error() 匹配的标志时,这种风格对的 userland 代码特别有用,这样 JSON 编码和解码可以更加高效的去处理错误

PHP 7.3 中 json_decode 函数增加了一些参数,用来处理错误,比如如下所示:

use JsonException;

try {

return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);

} catch (JsonException $e) {

// 处理 JSON 异常

}

// Or even just let it bubble up...

/**

* 将 JSON 字符串解码为数组 (Decode a JSON string into an array)

*

* @return array

* @throws JsonException

*/

function decode($jsonString) {

return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);

}

获取错误代码和错误信息

以前你想查看 JSON 的错误代码和错误信息,需要使用以下函数:

// 错误代码

json_last_error();

// 易于理解的错误信息

json_last_error_msg();

如果你使用新的「JSON_THROW_ON_ERROR」参数,获取错误代码和错误信息的方式如下:

try {

return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);

} catch (JsonException $e) {

$e->getMessage(); // like json_last_error_msg()

$e->getCode(); // like json_last_error()

}

查看更多 API 详细信息,请访问「base Exception 」, JsonException 异常是 Exception 的一个子类。

JSON 在 PHP 7.3 中的默认行为

当升级到 PHP 7.3 时,你将在一天内完成代码的向后兼容,并按照预期的结果继续工作。

PHP 的默认函数 json_encode|decode() 的行为没有改变, 在抛出的错误中 RFC 增加了一个新的选项和异常类。

了解更多

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接

我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言简单说】十九:二维数组循环嵌套(2)

这节直接用循环嵌套来输出二维数组了&#xff1a; 注&#xff1a;我说的队和列并不是一般说法&#xff0c;我用此比喻好让新手更好理解。 #include<stdio.h> #include<stdlib.h> int main() {int array[2][3]{1,2,3,4,5,6};//第一句 int i,j;//第二句 for(i0;i&l…

lia人是什么意思_狗狗喜欢舔人到底什么意思?毛孩的心思主人你要懂

很多人都喜欢养狗&#xff0c;因为它们忠诚、淘气、可爱。同时&#xff0c;狗狗也有很多奇怪的习惯&#xff0c;例如&#xff1a;喜欢舔人&#xff0c;喜欢追逐活动的东西等等。不过大多数狗主人通常都会有一个最想知道的问题&#xff1a;为什么狗狗总喜欢舔人&#xff0c;它们…

“爱思助手”曝为iOS木马:可绕过苹果DRM机制

一款新的iOS木马已在国内曝光&#xff0c;它可以通过PC感染未越狱的iOS设备&#xff0c;而无需利用企业证书。Palo Alto Networks指出&#xff0c;其名叫“爱思助手”(AceDeceiver)&#xff0c;目前正在影响我国的iOS用户。“爱思助手”利用了苹果数字版权管理(DRM)上的FairPla…

php运行条件,PHP配置环境要求 php运行的先决条件

类型&#xff1a;编程相关大小&#xff1a;320KB语言&#xff1a;中文 评分&#xff1a;6.6标签&#xff1a;立即下载在本教程中&#xff0c;假设用户的服务器已经安装并运行了 PHP&#xff0c;所有以 .php 结尾的文件都将由 PHP 来处理。在大部分的服务器上&#xff0c;这是 P…

【C语言简单说】二十:指针基础

。。据说指针很难 其实稍微理解概念不难。 先看百科的定义&#xff1a;在计算机科学中&#xff0c;指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向&#xff08;points to&#xff09;存在电脑存储器中另一个地方的…

Javascript中的循环变量声明,到底应该放在哪儿?

不放走任何一个细节。相信很多Javascript开发者都在声明循环变量时犹 豫过var i到底应该放在哪里&#xff1a;放在不同的位置会对程序的运行产生怎样的影响&#xff1f;哪一种方式符合Javascript的语言规范&#xff1f;哪一种方式和ecma标准未来的发展 方向匹配&#xff1f;本文…

Delphi全局热键的注册

1.在窗启动时创建ATOM;(aatom:ATOM;定义在private中&#xff09; 1 if FindAtom(ZWXhotKey)0 then 2 begin 3 aatom:GlobalAddAtom(ZWXhotKey); 4 end; 5 if RegisterHotKey(Handle,aatom,MOD_ALT,$41) then 6 begin 7 MessageBox(Handle,按alta,提示,MB_OK); 8 end; 2.定义处…

【C语言简单说】二十一:双重指针基础 (完结)

其实后面这两节我是用我几年前写的教程复制过来的。。。 ’ – ’ ) ( &#xff13; )╱~~ 如有错误&#xff0c;请留言提醒哈~~~尴尬的笑。 多重指针呢其实就是指向指针的指针。 首先&#xff0c;变量大家都知道是啥意思了吧&#xff1f;一个变量是有地址的。那么指针变量也是…

精彩回顾|「源」来如此 第六期 - 开源经济与产业投资

| 作者&#xff1a;活动组、袁睿斌| 编辑&#xff1a;金心悦| 设计&#xff1a;朱亿钦4月17日 14:00&#xff0c;由开源社联合云启资本、易观分析、云赛空间&#xff0c;以及微软 Reactor 共同主办&#xff0c;由示说网提供转播支持的「源」来如此 第六期直播活动如约而至。在本…

C#趣味程序---真分数序列

问题&#xff1a;按递增顺序依次列出所有分母为40&#xff0c;分子小于40的最简真分数。 分析&#xff1a;利用最大公约数 using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){for(int i1;i<40;i){int a 40;int b i;while (b!0…

有关 php __autoload 自动加载类函数的用法

这个函数是一个自动加载类函数&#xff0c;啥事自动加载函数&#xff0c;顾名思义 &#xff0c;那就是自己就会加载类的函数&#xff08;原谅我废话了&#xff09; 我们先看下面的代码&#xff1a; <?php function __autoload($classname) {echo "helloworld";…

IP签名档PHP源码,IPCard 一款天气图标签名档源码

源码介绍本源码对接高德z地图开发者平台的API实现获取IP和天气数据并使用php将天气的图标与文字相结合&#xff0c;形成一张IP签名档图片&#xff0c;最后呈现出来使用说明首先去高德开放平台申请KEY&#xff0c;点击右上角的注册按钮并登录账号&#xff0c;进入控制台&#xf…

Fiddler之如何通过浏览器输入链接地址修改页面返回数据的内容

1 问题 比如我们在浏览器里面输入www.baidu.com,那么就正常返回页面,我们怎么修改这个页面的返回内容呢?我们可以功过Fiddler构来实现,比如我们现在要实现在浏览器里面输入www.baidu.com,然后返回的页面返回chenyu这个功能。 2 操作过程 1) 由于我的谷歌浏览器使用了Swi…

大数据对六大领域的挑战

第一个挑战是大数据对人性假设的挑战。 管理学自诞生开始&#xff0c;就以人为对象&#xff0c;以人性假设为前提不断演化出各种理论。第一个提出科学管理理论的泰勒假设人是“经济人”&#xff0c;后来梅奥假设人是“社会人”&#xff0c;西蒙则构造了“决策人假设”。自西蒙之…

CentOS 6.3(x86_64)下安装Oracle 10g R2

CentOS 6.3(x86_64)下安装Oracle 10g R2 目 录 一、硬件要求 二、软件 三、系统安装注意 四、安装Oracle前的系统准备工作 五、安装Oracle&#xff0c;并进行相关设置 六、升级Oracle到patchset 10.2.0.4 七、使用rlwrap调用sqlplus中历史命令 一、硬件要求 1、内存 & swap…

比__autoload 更灵活的 spl_autoload_register 用法

直接上代码了&#xff1a; <?php function loadclass( $class ) { $file $class . .php; if (is_file($file)) { require_once($file); } } spl_autoload_register( loadclass ); $obj new Test1(); $obj->TestFunction(); ?> 以上php代码有一个函数loadclass有…

php短信接口怎么用,php短信接口接入详细过程

短信接口被广泛应用于互联网产品&#xff0c;在开发网站或app等应用时会经常遇到接入短信接口的需求&#xff0c;接入短信接口详细过程如下&#xff1a;首先需要找到一家短信接口服务商&#xff0c;获取短信接口调用地址和相关接入参考文档&#xff0c;这里就以动力思维乐信短信…

存储世界瞬息万变 SSD掀行业浪潮

存储世界瞬息万变&#xff0c;数据创建和共享速度也确实惊人。近几年&#xff0c;企业级存储市场群雄逐鹿&#xff0c;烽烟四起。SSD厂商迅速崛起&#xff0c;大杀四方。其性能、可靠性和容量秒杀“前任”HDD&#xff0c;尤其是惊人的速度更是受到用户追捧。 在虚拟化、云计算、…

numpy拼接_巧用numpy切分图片

昨晚发了接受投稿文章&#xff0c;昨晚就有读者积极来文章啦&#xff0c;几轮邮件交流了修改意见后&#xff0c;今天就发布啦&#xff0c;这篇的稿费是300。之前无聊在刷视频的时候看到这么一个有意思的视频&#xff08;现在视频找不到&#xff0c;忘记关键字了 &#xff09;&a…

tcp有限状态机分析

tcp有限状态机分析2011-11-23 0 个评论 收藏 我要投稿 这幅图是TCP的状态机&#xff0c;看了2个小时&#xff0c;分析总结如下&#xff1a;&#xff08;1&#xff09;CLOSED 状态时初始状态。&#xff08;2&#xff09;LISTEN:被动打开&#xff0c;服务器端的 状…