0

0

php多维数组成json_php复杂数组JSON编码方法【解析】

雪夜

雪夜

发布时间:2025-12-25 12:37:35

|

431人浏览过

|

来源于php中文网

原创

PHP多维数组转JSON需综合运用json_encode()标准选项、预处理结构、分层递归、第三方库及错误验证五种方法,确保编码完整性、中文正常、结构不丢失且可调试。

php多维数组成json_php复杂数组json编码方法【解析】

当您使用 PHP 将嵌套层级较深或包含混合数据类型的多维数组转换为 JSON 字符串时,可能遇到编码失败、中文乱码、null 值意外替换或对象/数组结构丢失等问题。以下是实现可靠 JSON 编码的多种方法:

一、使用 json_encode() 配合标准选项

PHP 内置的 json_encode() 函数是处理多维数组转 JSON 的基础方式,但需正确设置标志位以保障完整性与可读性。

1、确保数组键名和值均为 UTF-8 编码,若含 GBK 或其他编码字符串,先用 mb_convert_encoding() 转换。

2、调用 json_encode() 时传入 JSON_UNESCAPED_UNICODE 标志,避免中文被转为 \uXXXX 序列。

立即学习PHP免费学习笔记(深入)”;

3、添加 JSON_INVALID_UTF8_SUBSTITUTE 标志,自动过滤非法 UTF-8 字节序列,防止编码中断。

4、对含资源、闭包或不可序列化对象的数组,提前使用 array_walk_recursive() 过滤或替换为 null。

二、预处理数组结构再编码

针对存在循环引用、私有属性、__toString() 干扰或 DateTime 对象等复杂场景,需在编码前标准化数组结构。

1、遍历原数组,检测并移除 resource 类型值,例如数据库连接句柄或文件指针。

2、将 DateTime 实例统一转换为 ISO8601 字符串格式:$value->format('c')。

3、对实现了 JsonSerializable 接口的对象,调用其 jsonSerialize() 方法获取纯净数组后再合并。

4、使用 spl_object_hash() 辅助识别循环引用,对已出现过的对象引用跳过或标记为 "__circular_ref__"

三、分层递归编码控制

对于超大深度或需差异化处理各层级数据的数组(如仅某一层需转义 HTML),可采用手动递归替代一次性 json_encode()。

1、编写递归函数,参数为当前层级数组及当前深度计数器。

羚珑
羚珑

京东推出的一站式AI图像处理平台

下载

2、在每层入口判断深度是否超过限制(如 5 层),超出则截断并插入 "__truncated__" 占位符。

3、对字符串值单独调用 htmlspecialchars() 或 addslashes(),其余类型保持原样进入下一层。

4、叶子节点字符串统一通过 utf8_encode() 强制转码(仅用于非 UTF-8 源数据)。

四、使用第三方库进行增强编码

当内置函数无法满足容错性、性能或格式定制需求时,可引入轻量级库替代原始编码流程。

1、安装 composer require justinrainbow/json-schema(仅需其 Encoder 组件)或更专注的 json-tools/php-json-encoder。

2、实例化编码器对象,设置 strict_mode = false 允许跳过不可序列化项而非报错。

3、启用 indent_output 选项生成带缩进的可读 JSON,便于调试嵌套结构。

4、注册自定义类型处理器,例如将 SplFixedArray 自动展开为普通索引数组。

五、错误捕获与编码结果验证

编码后必须验证输出有效性,防止静默失败导致前端解析异常。

1、检查 json_encode() 返回值是否为 string 类型,若返回 false 则立即调用 json_last_error_msg() 获取错误原因。

2、使用 json_decode($result, true) 反向解析生成的 JSON 字符串,确认能无损还原为数组结构。

3、比对原数组与反解数组的 serialize() 哈希值,验证关键字段未被意外修改或截断。

4、对输出字符串执行 preg_match('/[^\x20-\x7E\x09\x0A\x0D\xC0-\xFD]/', $result),检测残留非法字节。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1669

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1103

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1007

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1227

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1438

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1302

2023.11.13

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号