在PHP开发中,JSON作为轻量级的数据交换格式,被广泛应用于前后端数据传输、接口响应等场景,掌握PHP对JSON数据的编码与解码操作是开发者的必备技能。PHP内置了专门的函数来处理JSON数据,无需额外引入扩展即可直接使用。

PHP编码JSON数据:json_encode函数
json_encode函数用于将PHP变量转换为JSON格式的字符串,支持大部分PHP数据类型,包括数组、对象、字符串、数值等。函数的基本语法为:
<?php
// 基本使用:将PHP数组编码为JSON字符串
$userInfo = [
'name' => '张三',
'age' => 25,
'hobby' => ['篮球', '阅读', '编程']
];
$jsonStr = json_encode($userInfo);
echo $jsonStr;
// 输出结果:{"name":"张三","age":25,"hobby":["篮球","阅读","编程"]}
?>json_encode还支持第二个参数,用于设置编码选项,常用的选项如下:
- JSON_UNESCAPED_UNICODE:不转义中文字符,默认中文会被转义为Unicode编码,使用该选项可保留中文原样
- JSON_PRETTY_PRINT:格式化输出JSON字符串,增加换行和缩进,方便阅读
- JSON_UNESCAPED_SLASHES:不转义斜杠,默认斜杠会被转义为\/,使用该选项可保留斜杠原样
带参数的使用示例:
<?php
$userInfo = [
'name' => '张三',
'blog_url' => 'https://www.ipipp.com/php-json'
];
// 同时设置不转义中文和不转义斜杠
$jsonStr = json_encode($userInfo, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo $jsonStr;
// 输出结果:{"name":"张三","blog_url":"https://www.ipipp.com/php-json"}
?>PHP解码JSON数据:json_decode函数
json_decode函数用于将JSON格式的字符串转换为PHP变量,基本语法为:
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
参数说明:
$json:待解码的JSON字符串,必须是合法的JSON格式$assoc:可选参数,默认为false,返回对象;设置为true时,返回关联数组$depth:可选参数,设置递归深度,默认512$options:可选参数,设置解码选项,比如JSON_BIGINT_AS_STRING可将大整数转为字符串
基础使用示例:
<?php
$jsonStr = '{"name":"李四","age":28,"hobby":["旅游","摄影"]}';
// 不设置assoc参数,返回对象
$userObj = json_decode($jsonStr);
echo $userObj->name; // 输出:李四
echo $userObj->age; // 输出:28
// 设置assoc为true,返回关联数组
$userArr = json_decode($jsonStr, true);
echo $userArr['name']; // 输出:李四
echo $userArr['age']; // 输出:28
?>常见注意事项
在实际使用过程中,需要注意以下几点避免出现问题:
- 待解码的JSON字符串必须是合法的格式,否则json_decode会返回null,可通过
json_last_error()函数获取错误码,判断错误原因 - json_encode处理资源类型、回调函数等无法序列化的类型时,会返回null或者特殊值,需要提前处理这类数据
- 如果JSON字符串中包含大整数,默认会被转为浮点型,可设置
JSON_BIGINT_AS_STRING选项将其转为字符串处理
错误处理的示例:
<?php
$invalidJson = '{"name":"王五",age:30}'; // 错误的JSON格式,键名没有加双引号
$result = json_decode($invalidJson);
if (is_null($result)) {
$errorCode = json_last_error();
$errorMsg = json_last_error_msg();
echo "JSON解码失败,错误码:{$errorCode},错误信息:{$errorMsg}";
}
?>实际应用场景示例
在接口开发中,通常会将接口响应数据编码为JSON格式返回,示例如下:
<?php
// 模拟接口返回数据
$response = [
'code' => 200,
'msg' => '请求成功',
'data' => [
'list' => [
['id' => 1, 'title' => 'PHP JSON教程'],
['id' => 2, 'title' => 'PHP接口开发']
],
'total' => 2
]
];
// 设置响应头为JSON格式
header('Content-Type: application/json; charset=utf-8');
// 输出JSON数据,不转义中文
echo json_encode($response, JSON_UNESCAPED_UNICODE);
?>
PHPJSONjson_encodejson_decode数据交互修改时间:2026-06-07 01:30:20