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"