PHP中的JSON处理:函数、示例与最佳实践

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

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

开始课程

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 — 出错时抛出异常(

推荐