PHP解析JSON数据主要依赖内置的json_decode和json_encode函数,这两个函数可以满足绝大多数JSON数据的处理和转换需求,下面通过具体示例介绍不同场景下的使用方法。

JSON数据解析基础
PHP中解析JSON字符串最常用的是json_decode函数,该函数可以将合法的JSON字符串转换为PHP的数组或者对象,语法格式如下:
<?php
// 待解析的JSON字符串
$jsonStr = '{"name":"张三","age":25,"hobby":["篮球","阅读"]}';
// 解析为关联数组,第二个参数传true
$arr = json_decode($jsonStr, true);
// 解析为对象,第二个参数不传或者传false
$obj = json_decode($jsonStr);
?>
当第二个参数为true时,函数返回关联数组;不传该参数时,默认返回stdClass对象,开发者可以根据后续的使用习惯选择返回类型。
解析结果的访问方式
不同的返回类型对应不同的数据访问方式,下面是两种类型的访问示例:
关联数组访问
<?php
$jsonStr = '{"name":"张三","age":25,"hobby":["篮球","阅读"]}';
$arr = json_decode($jsonStr, true);
// 访问普通字段
echo $arr['name']; // 输出 张三
echo $arr['age']; // 输出 25
// 访问数组字段
echo $arr['hobby'][0]; // 输出 篮球
?>
对象访问
<?php
$jsonStr = '{"name":"张三","age":25,"hobby":["篮球","阅读"]}';
$obj = json_decode($jsonStr);
// 访问普通属性
echo $obj->name; // 输出 张三
echo $obj->age; // 输出 25
// 访问数组属性
echo $obj->hobby[0]; // 输出 篮球
?>
处理解析失败的情况
如果传入的JSON字符串格式不合法,json_decode会返回null,此时可以通过json_last_error函数获取具体的错误原因,示例代码如下:
<?php
$invalidJson = '{"name":"张三",age:25}'; // 格式错误的JSON,age没有加双引号
$result = json_decode($invalidJson, true);
if (is_null($result)) {
$errorCode = json_last_error();
$errorMsg = json_last_error_msg();
echo "JSON解析失败,错误码:{$errorCode},错误信息:{$errorMsg}";
}
?>
JSON数据编码操作
除了解析JSON数据,PHP还可以使用json_encode函数把PHP数组或对象转换为JSON字符串,常用场景是把接口数据返回给前端,示例代码如下:
<?php
$userArr = [
'name' => '李四',
'age' => 28,
'score' => 95.5
];
// 转换为JSON字符串,第二个参数可以设置编码选项
$jsonStr = json_encode($userArr, JSON_UNESCAPED_UNICODE);
echo $jsonStr; // 输出 {"name":"李四","age":28,"score":95.5}
?>
这里使用JSON_UNESCAPED_UNICODE选项可以避免中文被转义为Unicode编码,保证输出内容的可读性。
复杂JSON数据的解析示例
实际开发中经常会遇到嵌套层级的复杂JSON数据,解析思路和普通JSON一致,逐层访问即可:
<?php
$complexJson = '{
"code":200,
"msg":"请求成功",
"data":{
"user_id":1001,
"user_info":{
"name":"王五",
"address":"北京市朝阳区"
},
"order_list":[
{"order_id":1,"price":199},
{"order_id":2,"price":299}
]
}
}';
$arr = json_decode($complexJson, true);
// 访问嵌套的用户名
echo $arr['data']['user_info']['name']; // 输出 王五
// 访问订单列表的第一个订单价格
echo $arr['data']['order_list'][0]['price']; // 输出 199
?>
PHPJSON解析json_decodejson_encode数组操作修改时间:2026-06-29 10:33:25