PHP中的JSON处理:JSON操作完整指南

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

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

开始课程

PHP中的JSON处理:完整指南



JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已成为客户端与服务器之间以及不同Web服务之间交互的事实标准。在PHP中,JSON操作是原生实现的,无需安装额外扩展,这使其成为解析和生成JSON数据最便捷的语言之一。本文将详细讲解PHP中JSON处理的所有方面:从基础函数到高级技术及错误处理。



PHP中用于JSON操作的核心函数



PHP提供了两个关键函数用于JSON操作:



  • json_encode($value, $options = 0, $depth = 512) — 将PHP值(数组、对象、字符串、数字)转换为JSON字符串。
  • json_decode($json, $associative = false, $depth = 512, $options = 0) — 将JSON字符串解码回PHP值。如果参数$associative设置为true,则返回关联数组,否则返回stdClass对象。


来看一个最简单的示例:



<?php// 创建一个关联数组$data = [    "name" => "伊万",    "age" => 30,    "city" => "莫斯科",    "skills" => ["PHP", "JavaScript", "Python"]];

// 编码为JSON$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $json;// 输出:// {// "name": "伊万",// "age": 30,// "city": "莫斯科",// "skills": ["PHP", "JavaScript", "Python"]// }

// 解码回数组$decoded = json_decode($json, true);echo $decoded['name']; // 伊万?>


json_encode的重要选项



json_encode函数支持多种标志,用于改变编码行为。其中最常用的有:



  • JSON_UNESCAPED_UNICODE — 不转义Unicode字符(西里尔字母、表情符号)。不使用此标志时,俄文字母会被转换为\\uXXXX形式。
  • JSON_PRETTY_PRINT — 使用缩进和换行格式化输出,便于阅读。
  • JSON_NUMERIC_CHECK — 将数字字符串转换为数字。
  • JSON_FORCE_OBJECT — 强制创建对象而非数组,即使数组为空或为索引数组。
  • JSON_PRESERVE_ZERO_FRACTION — 保留整数的分数部分(例如10.0)。


组合选项的示例:



<?php$data = ['product' => '书', 'price' => '1500.50', 'count' => 5];echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);// {"product":"书","price":1500.5,"count":5}?>


处理嵌套结构和复杂对象



PHP可以处理深度嵌套的JSON结构。来看一个解析复杂API响应的示例:



<?php// 假设这是来自外部API的响应$apiResponse = '{    "status": "success",    "data": {        "users": [            {"id": 1, "name": "安娜", "roles": ["admin", "editor"]},            {"id": 2, "name": "彼得", "roles": ["user"]}        ],        "pagination": {            "page": 1,            "totalPages": 3        }    }}';

$parsed = json_decode($apiResponse, true);

// 获取所有用户的姓名$names = array_column($parsed['data']['users'], 'name');print_r($names); // Array ( [0] => 安娜 [1] => 彼得 )

// 检查用户是否具有admin角色foreach ($parsed['data']['users'] as $user) { if (in_array('admin', $user['roles'])) { echo "{$user['name']} 拥有管理员权限"; }}?>


JSON错误处理



最常见的问题之一是无效的JSON。PHP提供了用于诊断错误的函数:



  • json_last_error() — 返回

推荐