PHP中的JSON处理:完整指南
JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,已成为客户端与服务器之间交互的标准。在PHP中,通过内置函数json_encode()和json_decode()原生实现了JSON处理。本文将详细讲解PHP中JSON处理的所有方面:从基本操作到高级技术及错误处理。
PHP中处理JSON的主要函数
PHP提供了两个关键工具用于处理JSON:
- json_encode() — 将PHP值(数组、对象、字符串)转换为JSON字符串。
- json_decode() — 将JSON字符串解码回PHP值。
json_encode()的基本使用示例
<?php// 原始数据:关联数组$data = [ 'name' => '伊万', 'age' => 30, 'skills' => ['PHP', 'JavaScript', 'Python']];
// 编码为JSON$jsonString = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>执行结果:
{ "name": "伊万", "age": 30, "skills": [ "PHP", "JavaScript", "Python" ]}标志JSON_UNESCAPED_UNICODE保留西里尔字母而不转义,JSON_PRETTY_PRINT则格式化输出并添加缩进以提高可读性。
PHP中解码JSON的示例
<?php$jsonString = '{"name":"安娜","age":25,"city":"莫斯科"}';
// 解码为关联数组(第二个参数为true)$array = json_decode($jsonString, true);echo $array['name']; // 安娜echo $array['city']; // 莫斯科
// 解码为对象(默认)$object = json_decode($jsonString);echo $object->name; // 安娜?>处理JSON时的错误处理
处理外部数据时,检查JSON的正确性非常重要。为此,请使用json_last_error()和json_last_error_msg():
<?php$invalidJson = '{name: "错误"}'; // 无效的JSON(键没有引号)
$decoded = json_decode($invalidJson);
if (json_last_error() !== JSON_ERROR_NONE) { $errorMsg = json_last_error_msg(); echo "JSON解码错误:$errorMsg"; // 输出:JSON解码错误:语法错误}?>处理嵌套结构
JSON非常适合复杂的层次数据。以下是一个包含嵌套数组和对象的示例:
<?php$complexData = [ 'users' => [ [ 'id' => 1, 'name' => '彼得', 'orders' => [ ['product' => '笔记本电脑', 'price' => 75000], ['product' => '鼠标', 'price' => 1500] ] ], [ 'id' => 2, 'name' => '玛丽亚', 'orders' => [] ] ], 'total_orders' => 2];
$json = json_encode($complexData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);file_put_contents('data.json', $json); // 保存到文件
// 读取回来$jsonFromFile = file_get_contents('data.json');$restoredData = json_decode($jsonFromFile, true);
// 访问嵌套数据echo $restoredData['users'][0]['orders'][0]['product']; // 笔记本电脑?>json_encode()的高级选项
PHP支持多种标志用于精细控制编码:
JSON_FORCE_OBJECT— 强制将数组编码为对象。JSON_NUMERIC_CHECK— 将数字字符串转换为数字。JSON_UNESCAPED_SLASHES— 不转义斜杠。JSON_THROW_ON_ERROR— 出错时抛出异常(