PHP中的JSON处理:函数、示例与最佳实践

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JSON 处理在 PHP 中的完整指南



JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,已成为服务器与客户端之间交互的事实标准。在 PHP 中,通过 json 扩展原生支持 JSON 处理,该扩展自 PHP 5.2.0 起可用。本文将详细讲解主要函数、错误处理、嵌套结构操作以及最佳实践。



JSON 处理的核心函数



PHP 提供了两个关键函数:



  • json_encode() — 将 PHP 值(数组、对象、字符串等)转换为 JSON 字符串。
  • json_decode() — 将 JSON 字符串转换回 PHP 变量(数组或对象)。


示例:将数组编码为 JSON



<?php$data = [    'name' => 'Alice',    'age' => 30,    'is_student' => false,    'skills' => ['PHP', 'JavaScript', 'Python']];

$json = json_encode($data, JSON_PRETTY_PRINT);echo $json;?>


执行结果:



{    "name": "Alice",    "age": 30,    "is_student": false,    "skills": [        "PHP",        "JavaScript",        "Python"    ]}


示例:将 JSON 解码为数组



<?php$jsonString = '{"name":"Bob","age":25,"is_active":true}';

// 第二个参数为 true 时返回关联数组$array = json_decode($jsonString, true);print_r($array);?>


结果:



Array(    [name] => Bob    [age] => 25    [is_active] => 1)


精细调整的标志位



json_encode() 和 json_decode() 函数支持第二个参数——标志位掩码。以下是最常用的标志:



  • JSON_PRETTY_PRINT — 格式化输出并添加缩进(便于阅读)。
  • JSON_UNESCAPED_UNICODE — 不转义 Unicode 字符(对西里尔字母等有用)。
  • JSON_FORCE_OBJECT — 强制将关联数组转换为对象。
  • JSON_NUMERIC_CHECK — 将包含数字的字符串转换为数值类型。


带西里尔字母和格式化的示例



<?php$data = [    'name' => 'Алексей',    'city' => 'Москва'];

echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);?>


结果:



{    "name": "Алексей",    "city": "Москва"}


JSON 处理中的错误处理



如果输入字符串不是有效的 JSON,json_decode() 将返回 null。要了解错误的具体原因,请使用 json_last_error() 和 json_last_error_msg() 函数。



<?php$invalidJson = '{name: "Alice"}'; // 无效 JSON(键名缺少引号)

$result = json_decode($invalidJson);if (json_last_error() !== JSON_ERROR_NONE) { echo '错误:' . json_last_error_msg();} else { print_r($result);}?>


输出:



错误:Syntax error


完整的错误常量列表:



  • JSON_ERROR_NONE — 没有错误。
  • JSON_ERROR_DEPTH — 超过最大堆栈深度。
  • JSON_ERROR_STATE_MISMATCH — 无效 JSON(括号不匹配)。
  • JSON_ERROR_SYNTAX — 语法错误。
  • JSON_ERROR_UTF8 — 无效的 UTF-8 编码。


处理嵌套结构



JSON 通常包含嵌套对象和数组。PHP 可以通过递归或循环轻松处理此类数据。



<?php$complexJson = '{    "users": [        {"name": "Alice"                    

推荐