JSON 与 PHP 简介
JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,已成为 Web 服务器与客户端之间交互的事实标准。在现代 PHP Web 开发中,您会频繁遇到 JSON:从 API 请求到配置文件,再到结构化数据的存储。
在本文中,我们将探讨在 PHP 中处理 JSON 的两个基本过程:
- 序列化 — 将 PHP 数组或对象转换为 JSON 字符串(
json_encode()函数)。 - 解析(反序列化) — 将 JSON 字符串反向转换为 PHP 变量(
json_decode()函数)。
本材料面向初学 PHP 的开发者,因此我们将由浅入深,并提供详细的代码示例。
数据序列化:json_encode() 函数
序列化是将数据从 PHP 内部表示(数组、对象)转换为 JSON 格式字符串的过程。当您需要将数据发送给客户端(浏览器、移动应用)或以通用格式保存到文件/数据库时,这是必要的。
将数组转换为 JSON
最简单的情况是序列化关联数组:
<?php$user = [ "name" => "伊万·彼得罗夫", "age" => 28, "email" => "ivan@example.com", "is_active" => true];
$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>执行结果:
{ "name": "伊万·彼得罗夫", "age": 28, "email": "ivan@example.com", "is_active": true}请注意以下标志:
JSON_UNESCAPED_UNICODE— 允许保留西里尔字母(若无此标志,俄文字符将被转换为 \\uXXXX)。JSON_PRETTY_PRINT— 使用缩进格式化输出以提高可读性(有助于调试,但会增加字符串大小)。
将对象转换为 JSON
PHP 对象也可以被序列化。此时仅包含 public 属性:
<?phpclass Product { public $id; public $title; private $secretPrice; // 不会包含在 JSON 中
public function __construct($id, $title, $price) { $this->id = $id; $this->title = $title; $this->secretPrice = $price; }}
$product = new Product(1, "笔记本电脑", 75000);echo json_encode($product, JSON_UNESCAPED_UNICODE);// 输出:{"id":1,"title":"笔记本电脑"}?>处理嵌套结构
JSON 支持嵌套。任意深度的 PHP 数组都能正确转换:
<?php$data = [ "company" => "TechCorp", "employees" => [ ["name" => "安娜", "position" => "开发者"], ["name" => "鲍里斯", "position" => "设计师"] ], "address" => [ "city" => "莫斯科", "street" => "特维尔大街" ]];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);?>解析 JSON:json_decode() 函数
解析(反序列化)是反向过程:从 JSON 字符串中获取 PHP 可以处理的数据。
获取对象
默认情况下,json_decode() 返回一个 stdClass 类的对象:
<?php$jsonString = '{"name":"伊万·彼得罗夫","age":28,"email":"ivan@example.com"}';$user = json_decode($jsonString);
echo $user->name; // 伊万·彼得罗夫echo $user->age; // 28echo $user->email; // ivan@example.com?>获取数组
如果传入第二个参数 true,函数将返回一个关联数组:
<