PHP作为服务端常用的开发语言,内置了完善的JSON数据处理能力,开发者可以直接调用内置函数完成JSON字符串和PHP变量之间的转换,不需要额外安装扩展,使用起来非常便捷。

PHP中JSON编码:json_encode函数
json_encode函数的作用是将PHP的变量转换为JSON格式的字符串,这是PHP处理JSON数据的第一步,常用的变量类型比如数组、对象都可以进行编码操作。
基本语法
函数的基本语法格式如下:
<?php // 基本语法 $jsonStr = json_encode($value, $options = 0, $depth = 512); ?>
参数说明:
- $value:需要编码的PHP变量,支持的类型包括数组、对象、字符串、数字、布尔值、null等。
- $options:可选参数,是一些常量组合,用于控制编码的行为,比如是否保留中文、是否格式化输出等。
- $depth:可选参数,设置最大递归深度,默认值是512,一般开发场景不需要修改这个参数。
使用示例
下面是不同类型变量的编码示例:
<?php
// 编码普通数组
$arr = ['name' => '张三', 'age' => 25, 'is_student' => false];
$json1 = json_encode($arr);
echo $json1 . PHP_EOL;
// 输出:{"name":"u5f20u4e09","age":25,"is_student":false}
// 编码时保留中文,使用JSON_UNESCAPED_UNICODE选项
$json2 = json_encode($arr, JSON_UNESCAPED_UNICODE);
echo $json2 . PHP_EOL;
// 输出:{"name":"张三","age":25,"is_student":false}
// 编码时格式化输出,方便查看结构,组合多个选项
$json3 = json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json3 . PHP_EOL;
// 输出格式化后的JSON字符串
?>
PHP中JSON解码:json_decode函数
json_decode函数的作用是将JSON格式的字符串转换为PHP变量,通常用于接收前端传递的JSON数据或者读取存储的JSON格式内容时使用。
基本语法
函数的基本语法格式如下:
<?php // 基本语法 $data = json_decode($json, $assoc = false, $depth = 512, $options = 0); ?>
参数说明:
- $json:需要解码的JSON格式字符串,必须是合法的JSON格式,否则会解码失败。
- $assoc:可选参数,默认值是false,当为true时,返回的结果是关联数组,为false时返回的是stdClass对象。
- $depth:可选参数,设置最大递归深度,默认值是512。
- $options:可选参数,用于控制解码的行为,比如处理大整数时的处理方式。
使用示例
下面是不同解码场景的示例:
<?php
$jsonStr = '{"name":"李四","age":30,"hobbies":["读书","跑步"]}';
// 默认解码为对象
$obj = json_decode($jsonStr);
echo $obj->name . PHP_EOL; // 输出:李四
echo $obj->hobbies[0] . PHP_EOL; // 输出:读书
// 解码为关联数组
$arr = json_decode($jsonStr, true);
echo $arr['name'] . PHP_EOL; // 输出:李四
echo $arr['hobbies'][1] . PHP_EOL; // 输出:跑步
?>
常见错误处理
在处理JSON数据时,可能会遇到编码或者解码失败的情况,这时候可以通过json_last_error函数获取错误码,通过json_last_error_msg函数获取错误信息,方便排查问题。
<?php
$invalidJson = '{"name":"王五",age:20}'; // 非法JSON,键名没有加双引号
$data = json_decode($invalidJson);
if (json_last_error() !== JSON_ERROR_NONE) {
echo "解码失败,错误信息:" . json_last_error_msg() . PHP_EOL;
}
?>
实际开发场景示例
下面是接口返回JSON数据的常见场景示例,通常会设置对应的响应头,然后输出编码后的JSON字符串:
<?php
// 设置响应头为JSON格式
header('Content-Type: application/json; charset=utf-8');
// 准备返回的数据
$response = [
'code' => 200,
'msg' => '请求成功',
'data' => [
'user_id' => 1001,
'username' => 'test_user'
]
];
// 编码并输出,保留中文
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
?>
PHPJSON_encodeJSON_decodeJSON数据处理修改时间:2026-06-19 20:39:37