PHP处理JSON应封装json_pack/json_unpack等函数,内置UTF-8校验、错误捕获、大整数保护、空值防御及文件读取支持,并扩展Schema校验与自动序列化能力。

PHP处理JSON数组的核心是json_encode()和json_decode(),但直接裸用容易出错、难维护。封装成可复用、带容错、适配业务场景的函数,能显著提升开发效率与代码健壮性。
安全编码:支持中文、格式化与错误捕获
避免每次手动加标志位或重复检查返回值。封装一个统一的编码函数,内置常用选项和错误反馈:
- 默认启用
JSON_UNESCAPED_UNICODE,保留中文不转义 - 可选开启
JSON_PRETTY_PRINT用于调试或日志输出 - 失败时返回
false并记录json_last_error_msg(),便于快速定位 - 强制要求输入数据为UTF-8编码,非字符串值(如资源、闭包)提前过滤
稳健解码:自动识别类型 + 防NULL陷阱
外部传入的JSON字符串常有格式错误或空值,直接调用json_decode()易导致静默失败。建议封装如下逻辑:
- 默认以关联数组形式返回(
$assoc = true),更符合PHP开发习惯 - 先用
json_validate()预检(PHP 7.3+),再执行解码,避免无效JSON返回null - 对
null结果做明确判断,区分“空JSON”、“语法错误”、“超深度嵌套”等情形 - 大整数场景下,主动添加
JSON_BIGINT_AS_STRING防止精度丢失
批量处理:数组转JSON与JSON转数组的一键互换
高频操作如API响应组装、配置文件读写、日志结构化,适合封装成简洁接口:
立即学习“PHP免费学习笔记(深入)”;
-
json_pack($data):接收任意PHP变量,安全编码为字符串;支持递归清理不可序列化项(如__toString()对象) -
json_unpack($json, $default = []):解码失败时返回预设默认值,避免业务层反复判空 - 支持从文件路径直接读取并解析JSON(
json_load('config.json')),内部自动处理file_get_contents和编码校验
扩展能力:兼容对象序列化与结构校验
面对复杂业务对象,基础函数不够用。进阶封装可包含:
- 自动检测类是否实现
JsonSerializable,优先走自定义序列化逻辑 - 集成轻量级Schema验证(如用
ramsey/json-pointer或正则简易校验),在解码后立刻检查必填字段 - 提供
json_filter_empty()辅助函数,递归剔除null、空字符串、空数组等无意义值,减小传输体积



















