在php开发中,json已经成为前后端数据交换的标准格式。php内置了json_decode和json_encode两个函数,分别用于解析和生成json数据,使用起来非常方便。下面通过实例讲解它们的具体用法和注意事项。

一、php解析json数据
解析json使用的是json_decode函数。它接收json字符串,返回对应的php数组或对象。第二个参数设为true时返回数组,否则返回对象。
<?php
$jsonStr = '{"name":"张三","age":20,"hobby":["篮球","音乐"]}';
// 解析为关联数组
$data = json_decode($jsonStr, true);
if (json_last_error() === JSON_ERROR_NONE) {
// 解析成功
echo $data['name']; // 输出:张三
echo $data['hobby'][0]; // 输出:篮球
} else {
// 解析失败处理
echo 'json解析错误:' . json_last_error_msg();
}
?>
使用json_last_error和json_last_error_msg可以捕获解析过程中的错误,比如json格式不正确或编码问题。
二、php生成json数据
生成json使用json_encode函数,它把php数组或对象转为json字符串。中文默认会被编码为unicode,可加JSON_UNESCAPED_UNICODE参数保留中文。
<?php
$arr = array(
'code' => 0,
'msg' => '成功',
'data' => array('id' => 1, 'title' => '测试文章')
);
$json = json_encode($arr, JSON_UNESCAPED_UNICODE);
// 输出:{"code":0,"msg":"成功","data":{"id":1,"title":"测试文章"}}
echo $json;
?>
常见参数说明
| 参数常量 | 作用 |
|---|---|
| JSON_UNESCAPED_UNICODE | 不转义中文,直接输出中文文字 |
| JSON_PRETTY_PRINT | 格式化输出,带缩进方便查看 |
| JSON_UNESCAPED_SLASHES | 不转义斜杠 |
三、完整交互示例
下面是一个简单的接口例子,先生成json响应,再模拟接收并解析。
<?php
// 生成响应
header('Content-Type: application/json');
$resp = array('status' => 1, 'list' => array('a', 'b'));
echo json_encode($resp, JSON_UNESCAPED_UNICODE);
// 假设接收到客户端json
$input = '{"username":"lisi","age":25}';
$user = json_decode($input, true);
if (is_array($user)) {
echo $user['username'];
}
?>
四、注意事项
- json字符串必须是utf-8编码,否则json_encode会返回false。
- 解析前应尽量校验数据来源,避免非法json导致程序异常。
- 复杂对象如果包含私有属性,json_encode只输出公有属性。
掌握php解析与生成json数据的方法,是开发web接口和前后端分离项目的基础能力。
phpjsonjson_encode修改时间:2026-07-26 04:33:18