PHP中json_encode与json_decode的正确用法与避坑指南

纸上星河
纸上星河
发布时间:2026-10-15| 3人浏览过
原创

在PHP开发中,JSON是前端与后端进行数据交换的标准格式。掌握 json_encode 和 json_decode 函数不仅能完成基础的数据转换,还能通过可选参数解决中文乱码、数组转对象等常见难题,确保接口数据的准确性与可读性。

核心概念与结果目标

json_encode() 负责将 PHP 变量编码为 JSON 格式的字符串,常用于接口返回数据;json_decode() 则相反,用于接收外部传入的 JSON 字符串并将其还原为 PHP 数据结构。理解两者的参数差异是高效处理数据的关键。

准备条件

  • 环境要求:PHP 5.2.0 及以上版本(现代项目通常为 7.x 或 8.x)。
  • 编码规范:json_encode() 仅接受 UTF-8 编码的数据源。若原始数据非 UTF-8,需先转换,否则可能返回 false 或空值。

真实操作顺序

第1步:使用 json_decode 解析 JSON 字符串

目的:将 JSON 数据转换为 PHP 可用的变量,并决定保留对象结构还是转为关联数组。

入口:json_decode(string $json, bool $assoc = false)

关键参数:

  • $assoc:默认 false,返回 stdClass 对象;设为 true,返回关联数组。

动作演示:

<?php 
// 定义一个 JSON 字符串
$json_str = '{"name":"Test","id":100, "items":["A","B"]}'; 

// 1. 默认行为:转换为对象 (Object)
$obj_result = json_decode($json_str); 
var_dump($obj_result->name); // 输出: string(4) "Test" 

// 2. 开启 assoc 参数:转换为关联数组 (Array)
$arr_result = json_decode($json_str, true); 
var_dump($arr_result['name']); // 输出: string(4) "Test" 
?
>

第2步:使用 json_encode 生成 JSON 字符串

目的:将 PHP 数组或对象序列化为 JSON 字符串,以便前端 JS 解析。

入口:json_encode(mixed $value, int $options = 0, int $depth = 512)

重要选项常量:

  • JSON_UNESCAPED_UNICODE:强烈推荐。默认情况下中文会被转义为 Unicode 编码(如 \uXXXX),此选项可保留原始中文,提升可读性。
  • JSON_PRETTY_PRINT:格式化输出,添加缩进换行,便于调试。
  • JSON_FORCE_OBJECT:强制将索引数组转换为对象。

动作演示:

<?php 
$data = array(
    'status' => 1,
    'msg' => '成功',
    'detail' => array('a', 'b', 'c') 
);

// 常规编码(中文会被转义)
echo json_encode($data); 
// 输出: {"status":1,"msg":"\u6210\u529f","detail":["a","b","c"]}

// 推荐编码(保留中文且格式化)
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); 
/* 
输出:
{
    "status": 1,
    "msg": "成功",
    "detail": [
        "a",
        "b",
        "c"
    ]
}
*/

// 注意连续与非连续数组的区别
$seq_arr = array("x", "y", "z"); 
echo json_encode($seq_arr); 
// 输出: ["x","y","z"] (标准数组格式)

unset($seq_arr[1]); 
echo json_encode($seq_arr); 
// 输出: {"0":"x","2":"z"} (非连续键被转为对象格式,易踩坑)
?
>

完成判断

当 json_encode 输出的字符串能被浏览器控制台正确解析,且中文显示正常而非乱码或长串 Unicode 时,表示编码配置正确。当 json_decode 返回的结果能按预期通过 ->key 或 [key] 访问数据,且无警告信息时,表示解码成功。

原文有依据的排错

  • 返回值检查:调用失败时,json_decode 和 json_encode 均返回 false。建议在出错时使用 json_last_error_msg() 获取详细错误信息(如“Syntax error”、“Maximum depth exceeded”)。
  • 空值陷阱:如果输入 JSON 字符串为空或非标准格式,解码结果为 null。在处理 API 响应前务必增加 if ($data === null && json_last_error() !== JSON_ERROR_NONE) 的判断逻辑。

简要总结

合理运用 json_decode(..., true) 和 json_encode(..., JSON_UNESCAPED_UNICODE) 是 PHP 处理 JSON 数据的最佳实践。它能有效规避类型混淆和数据截断问题,提高前后端协作效率。

以上就是PHP中json_encode与json_decode的正确用法与避坑指南的详细内容,更多关于PHP JSON处理优化与API数据交互的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。