PHP JSON 处理详解
                           
天天向上
发布: 2025-03-21 00:12:34

原创
938 人浏览过

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于 前后端数据交互,例如,Web 应用和 RESTful API 的通信。PHP 提供了内建的 JSON 扩展,使得 PHP 在处理 JSON 数据时非常方便。

本文将详细介绍如何在 PHP 中使用 JSON,包括 JSON 编码、解码、错误处理等内容。


1. JSON 编码(json_encode()

json_encode() 函数将 PHP 数据(数组或对象)转换为 JSON 格式字符串

基本示例:将数组转换为 JSON

$array = [
    "name" => "Tom",
    "age" => 25,
    "city" => "New York"
];

$json_data = json_encode($array);
echo $json_data;  // 输出: {"name":"Tom","age":25,"city":"New York"}

📌 这里的 数组 被编码为 JSON 格式

示例:将对象转换为 JSON

class Person {
    public $name;
    public $age;

    function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$person = new Person("Tom", 25);
$json_data = json_encode($person);
echo $json_data;  // 输出: {"name":"Tom","age":25}

📌 对象 也能被 json_encode() 转换为 JSON 格式字符串

控制选项(JSON_PRETTY_PRINT

$array = [
    "name" => "Tom",
    "age" => 25,
    "city" => "New York"
];

$json_data = json_encode($array, JSON_PRETTY_PRINT);
echo $json_data;

📌 JSON_PRETTY_PRINT 选项使 JSON 数据更加 可读,适合调试输出。


2. JSON 解码(json_decode()

json_decode() 函数将 JSON 格式字符串 转换为 PHP 数据(数组或对象)。

基本示例:将 JSON 字符串转换为 PHP 数组

$json_data = '{"name":"Tom","age":25,"city":"New York"}';
$array = json_decode($json_data, true);
print_r($array);

📌 设置第二个参数为 true,返回值为 关联数组

示例:将 JSON 字符串转换为 PHP 对象

$json_data = '{"name":"Tom","age":25,"city":"New York"}';
$object = json_decode($json_data);
echo $object->name;  // 输出: Tom

📌 如果不传递第二个参数,默认返回值为 对象

错误处理(json_last_error()

在解码 JSON 数据时,可能会遇到格式错误。通过 json_last_error() 可以获取 解码错误

$json_data = '{"name":"Tom", "age":25,}';  // JSON 格式错误(最后有多余的逗号)

$data = json_decode($json_data);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON 解码错误:" . json_last_error_msg();  // 输出: Syntax error
}

📌 json_last_error_msg() 返回错误信息,帮助你快速定位问题。


3. JSON 错误处理

在编码或解码 JSON 数据时,如果出现错误,可以通过以下常用函数进行错误检查:

常见 JSON 错误常量

  • JSON_ERROR_NONE: 没有错误。
  • JSON_ERROR_DEPTH: 最大堆栈深度超出限制。
  • JSON_ERROR_STATE_MISMATCH: 无效或异常的 JSON 状态。
  • JSON_ERROR_CTRL_CHAR: 控制字符错误。
  • JSON_ERROR_SYNTAX: 语法错误。
  • JSON_ERROR_UTF8: UTF-8 编码错误。

示例:捕获 JSON 编码错误

$data = ["name" => "Tom", "age" => "\xB1\x31"];  // 包含非法字符

$json_data = json_encode($data);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "编码错误:" . json_last_error_msg();  // 输出: Malformed UTF-8 characters, possibly incorrectly encoded
}

📌 在这个例子中,数据包含非法的 UTF-8 字符,因此 json_last_error() 会返回错误。


4. JSON 数据处理的高级选项

PHP 提供了多种编码选项,允许你更精确地控制 JSON 数据的输出。

常见选项

  • JSON_HEX_TAG: 将 <> 转换为 \u003C\u003E
  • JSON_HEX_AMP: 将 & 转换为 \u0026
  • JSON_HEX_APOS: 将 ' 转换为 \u0027
  • JSON_HEX_QUOT: 将 " 转换为 \u0022
  • JSON_FORCE_OBJECT: 强制 JSON 对象的输出。
  • JSON_UNESCAPED_UNICODE: 不转义 Unicode 字符(默认转义)。
  • JSON_UNESCAPED_SLASHES: 不转义斜杠。

示例:使用多个选项

$data = [
    "name" => "Tom & Jerry",
    "city" => "New York"
];

$json_data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json_data;

📌 这里的 JSON_UNESCAPED_UNICODE 使得 Unicode 字符不被转义JSON_PRETTY_PRINT 则让 JSON 输出更加可读。


5. 示例:将 JSON 用于 AJAX 请求

在 Web 开发中,JSON 经常作为 前后端数据交换 的格式。例如,通过 AJAX 向服务器发送 JSON 数据,并从服务器返回 JSON 格式的响应。

前端(JavaScript)代码

let data = {
    name: "Tom",
    age: 25
};

fetch("process.php", {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

后端(PHP)代码(process.php)

// 获取 JSON 数据并解码
$data = json_decode(file_get_contents("php://input"), true);

// 处理数据
$name = $data["name"];
$age = $data["age"];

// 返回 JSON 响应
$response = ["status" => "success", "name" => $name, "age" => $age];
echo json_encode($response);

📌 这个例子展示了如何通过 AJAX 将 JSON 数据发送到服务器,后端 PHP 解析该数据,并返回一个 JSON 响应


总结

功能函数示例
编码json_encode()json_encode(["name" => "Tom", "age" => 25])
解码json_decode()json_decode('{"name":"Tom","age":25}')
错误处理json_last_error()json_last_error_msg()
自定义选项JSON_HEX_TAG, JSON_PRETTY_PRINTjson_encode($data, JSON_PRETTY_PRINT)
发送/接收 JSONfile_get_contents("php://input")json_decode(file_get_contents("php://input"))

PHP JSON 扩展使得与前端的交互变得更加简洁、安全,广泛用于现代 Web 开发中的数据传输!

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *