2023-04-06 04:41:12
PHP处理JSON数据的核心是json_encode()和json_decode()函数,分别用于数据序列化和反序列化。以下是详细说明及关键注意事项:
一、json_encode():PHP变量转JSON字符串JSON_UNESCAPED_UNICODE:避免中文被转义为Unicode序列(如u4e00),旁缺直接输出中文字符。json_encode($data, JSON_UNESCAPED_UNICODE); // 输出:{"name":"张三","age":30}
JSON_PRETTY_PRINT:生成格式化的JSON字符串,便于阅读。echo json_encode($data, JSON_PRETTY_PRINT);// 输出:// {// "name": "张三",// "age": 30// }
数据类型转换规则:
关联数组 → JSON对象;索引数组 → JSON数组。
对象默认转为JSON对象,可通过实现JsonSerializable接口自定义转换逻辑。
第二个参数:设为true时返回关联数组,省运穗辩略或设为false时返回stdClass对象。
错误处理:解析失败时返回null,需通过json_last_error()和json_last_error_msg()获取错误信息。$invalidJson = '{"name":"张三",}'; // 语法错误$data = json_decode($invalidJson);if ($data === null) { echo "错误代码:" . json_last_error() . "n"; // 输出:JSON_ERROR_SYNTAX echo "错误信息:" . json_last_error_msg(); // 输出:语法错误}
深度限制:默认解析深度为512层,可通过json_decode($json, true, 512)调整。
若需保留HTML标签,先用htmlspecialchars()编码,解析后再用htmlspecialchars_decode()解码。$data['message'] = htmlspecialchars($data['message'], ENT_QUOTES);$json = json_encode($data);$decoded = htmlspecialchars_decode(json_decode($json)->message);
JSON_ERROR_SYNTAX:JSON语法错误(如多余逗号、未闭合引号)。
JSON_ERROR_UTF8:非UTF-8编码字符。
JSON_ERROR_DEPTH:嵌套过深(超过默认512层)。
检查JSON字符串格式,使用在线工具(如
确保输入为UTF-8编码,必要时用mb_convert_encoding()转换。
调整解析深度或拆分大JSON为多个小文件。
掌握json_encode()和json_decode()的核心参数与错误处理机制,结合特殊字符处理和大数据优化策略,可高效完成PHP中的JSON数据交互。实际开发中需始终验证解析结果,并根据场景选择合适的数据结构和工具。