PHP中的JSON操作:实战解析与序列化

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

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

开始课程

PHP中的JSON操作:实战解析与序列化



JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,已成为Web API和配置文件的通用标准。在PHP中,JSON操作是原生支持的,无需安装额外扩展。本文将结合实际示例,讲解如何在PHP中执行JSON的解析与序列化,并学习错误处理及嵌套结构的操作。



什么是JSON序列化与解析?



在进入代码之前,我们先明确关键概念:



  • 序列化 — 将PHP变量(数组、对象)转换为JSON字符串。
  • 解析(反序列化) — 反向过程:将JSON字符串转换为PHP变量。


PHP提供了两个主要函数来完成这些任务:json_encode() 和 json_decode()。下面我们来详细了解它们。



使用 json_encode() 将数据序列化为JSON



json_encode() 函数接受一个PHP值(资源类型除外),并返回其JSON表示。来看一个基本示例:



<?php$user = [    'name' => '伊万·彼得罗夫',    'age' => 28,    'email' => 'ivan@example.com',    'is_active' => true];

$json = json_encode($user);echo $json;// 输出: {"name":"伊万·彼得罗夫","age":28,"email":"ivan@example.com","is_active":true}?>


默认情况下,json_encode() 会将关联数组转换为JSON对象。如果需要得到数组,请使用 JSON_FORCE_OBJECT 标志:



<?php$numbers = [10, 20, 30];echo json_encode($numbers); // [10,20,30]echo json_encode($numbers, JSON_FORCE_OBJECT); // {"0":10,"1":20,"2":30}?>


json_encode() 的实用标志



  • JSON_PRETTY_PRINT — 格式化输出,增加缩进以提高可读性。
  • JSON_UNESCAPED_UNICODE — 不转义Unicode字符(如俄文字母)。
  • JSON_NUMERIC_CHECK — 将包含数字的字符串转换为数字类型。


<?php$data = ['product' => '书籍', 'price' => '1500'];

// 美观输出,保留俄文字符echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);/*{ "product": "书籍", "price": "1500"}*/

// 自动将字符串 '1500' 转换为数字echo json_encode($data, JSON_NUMERIC_CHECK);// {"product":"书籍","price":1500}?>


使用 json_decode() 在PHP中解析JSON



json_decode() 函数接受一个JSON字符串,并将其转换为PHP变量。第二个参数 $associative 决定返回关联数组(true)还是对象(false,默认值)。



<?php$jsonString = '{"name":"玛丽亚","age":25,"hobbies":["阅读","旅行"]}';

// 解析为对象$obj = json_decode($jsonString);echo $obj->name; // 玛丽亚echo $obj->hobbies[0]; // 阅读

// 解析为关联数组$arr = json_decode($jsonString, true);echo $arr['age']; // 25?>


处理嵌套结构



JSON通常包含嵌套的对象和数组。来看一个天气API的示例:



<?php$weatherJson = '{    "city": "莫斯科",    "temperature": {        "current": -5,        "feels_like": -8    },    "forecast": [        {"day": "周一", "temp": -3},        {"day": "周二", "temp": -1}    ]}';

$weather = json_decode($weatherJson, true);

echo "当前温度: " . $weather['temperature']['current'] . "°C";echo "体感温度: " . $weather['temperature']['feels_like'] . "°C";

foreach ($weather['forecast'] as $day) { echo "{$day['day']}: {$day['temp']}°C";}?>


博客

书籍推荐