使用json_last_error()和JSON_THROW_ON_ERROR可检测JSON解析错误,结合封装函数返回友好提示,提升调试效率。
PHP 中使用 json_decode() 解析 JSON 字符串时,如果内容存在语法错误(如引号不匹配、非法字符、格式错误等),函数不会抛出异常,而是返回 null。因此需要额外手段来检测和捕获这些错误。通过结合错误标志和封装处理逻辑,可以实现更友好的错误提示。
PHP 提供了 json_last_error() 函数,用于获取最后一次 JSON 操作的错误状态。配合 json_decode() 使用,可判断是否解析成功:
RL_CHAR:控制字符错误示例代码:
function safeJsonDecode($jsonString) {
$data = json_decode($jsonString, true);
if (json_last_error() === JSON_ERROR_NONE) {
return ['success' => true, 'data' => $data];
}
return [
'success' => false,
'error' => json_last_error_msg(),
'raw' => $jsonString
];
}
从 PHP 7.3 开始,json_decode() 支持传入 JSON_THROW_ON_ERROR 标志,使函数在出错时抛出 JsonException 异常,便于用 try-catch 捕获:
try {
$data = json_decode($jsonString, true, 512, JSON_THROW_ON_ERROR);
echo "解析成功";
} catch (JsonException $e) {
echo "JSON 解析失败: " . $e->getMessage();
}
将上述方法整合,可创建一个健壮的 JSON 解析包装函数,兼顾兼容性和提示清晰度:
function parseJson($jsonString) {
// 去除 BOM 或空白字符干扰
$jsonString = trim($jsonString);
if (substr($jsonString, 0, 3) === pack("CCC", 0xEF, 0xBB, 0xBF)) {
$jsonString = substr($jsonString, 3);
}
if (PHP_VERSION_ID >= 70300) {
try {
$data = json_decode($jsonString, true, 512, JSON_THROW_ON_ERROR);
return ['success' => true, 'data' => $data];
} catch (JsonException $e) {
return [
'success' => false,
'error' => $e->getMessage(),
'code' => $e->getCode()
];
}
} else {
$data = json_decode($jsonString, true);
if (json_last_error() === JSON_ERROR_NONE) {
return ['success' => true, 'data' => $data];
}
return [
'success' => false,
'error' => json_last_error_msg(),
'hint' => '请检查 JSON 格式,如引号、逗号、括号是否正确'
];
}
}
调用示例:
$result = parseJson('{"name": "张三", "age": }');
if (!$result['success']) {
echo "错误提示:" . $result['error'];
}
基本上就这些。合理使用错误检测机制和异常处理,能让 JSON 解析更可靠,调试更高效。
# php
# js
# json
# 编码
# 栈
# NULL
# 封装
# try
# catch
# 字符串
# 堆
# 抛出
# 错误提示
# 不匹配
# 能让
# 可以实现
# 创建一个
# 是否正确
# 请检查
# 判断是否
# img
相关文章:
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何用西部建站助手快速创建专业网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
广东企业建站网站优化与SEO营销核心策略指南
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
招贴海报怎么做,什么是海报招贴?
宝塔面板创建网站无法访问?如何快速排查修复?
如何在阿里云完成域名注册与建站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
如何在搬瓦工VPS快速搭建网站?
制作门户网站的参考文献在哪,小说网站怎么建立?
怎么将XML数据可视化 D3.js加载XML
如何通过NAT技术实现内网高效建站?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何在宝塔面板中创建新站点?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何在宝塔面板中修改默认建站目录?
c++ stringstream用法详解_c++字符串与数字转换利器
如何续费美橙建站之星域名及服务?
济南专业网站制作公司,济南信息工程学校怎么样?
网站制作的步骤包括,正确网址格式怎么写?
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何构建满足综合性能需求的优质建站方案?
三星网站视频制作教程下载,三星w23网页如何全屏?
建站之星如何实现五合一智能建站与营销推广?
c++怎么用jemalloc c++替换默认内存分配器【性能】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何快速上传自定义模板至建站之星?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
Swift中swift中的switch 语句
如何快速搭建高效简练网站?
简单实现Android文件上传
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
电商平台网站制作流程,电商网站如何制作?
建站之星免费版是否永久可用?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何通过云梦建站系统实现SEO快速优化?
微信小程序 五星评分(包括半颗星评分)实例代码
建站之星如何实现PC+手机+微信网站五合一建站?
Python如何创建带属性的XML节点
定制建站策划方案_专业建站与网站建设方案一站式指南
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站三合一如何选?哪家性价比更高?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
广州营销型建站服务商推荐:技术优势与SEO优化解析
C++时间戳转换成日期时间的步骤和示例代码
高端网站建设与定制开发一站式解决方案 中企动力
*请认真填写需求信息,我们会在24小时内与您取得联系。