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、编写递归函数,参数为当前层级数组及当前深度计数器。

Krea AI
Krea AI

多功能的一站式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),检测残留非法字节。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

161

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

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

精品课程

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

共137课时 | 13.4万人学习

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

共6课时 | 11.3万人学习

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

共13课时 | 1.0万人学习

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

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