PHP中JSON的null可被正常解析为PHP NULL,但解析失败常因字符串含HTML实体、BOM头、内层未转义引号或非UTF-8编码;使用时应通过isset、is_null或??运算符安全处理。

PHP 解析 JSON 中的 null 值本身没有问题——只要 JSON 字符串格式正确、编码合规,json_decode() 会自动把 "null" 映射为 PHP 的 NULL 类型。真正容易出错的,是“看着像 null 却解析失败”,或者“想用 null 却得到空字符串/空数组”这类隐性问题。
下面分三类讲清楚:
一、JSON 里的 null 能被正常识别吗
能,而且很直接:
-
{ "status": null }→json_decode($str)后,$obj->status === NULL(对象模式) -
{ "data": null }→json_decode($str, true)后,$arr['data'] === NULL(数组模式) - 注意:PHP 的
NULL是严格类型,用===判断最稳妥,==可能误判(比如0 == NULL为真)
二、为什么有时 null 导致解析失败(返回 NULL)
这不是 null 本身的问题,而是 JSON 字符串整体不合法,常见原因有:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
立即学习“PHP免费学习笔记(深入)”;
- 字符串含 HTML 实体,比如
"代替了双引号 → 先用html_entity_decode()处理 - 存在 BOM 头(尤其 UTF-8 with BOM 文件保存时)→ 用
trim($json, "\xEF\xBB\xBF")去掉 - 内层 JSON 未转义:如
"avinfo":"{...}"中的{里又含未转义的双引号 → 整体 JSON 语法崩了 - 编码不是 UTF-8(如 GBK)→ 用
mb_convert_encoding($json, 'UTF-8', 'GBK')转换
三、解析后怎么安全使用 null 值
别直接访问,先判断:
- 用
isset($data['field'])检查键是否存在且非 null - 用
array_key_exists('field', $data)区分“键不存在”和“键存在但值为 null” - 用
!is_null($data['field'])明确判断是否为 null - 需要默认值时,可用空合并运算符:
$name = $data['name'] ?? '未知'
如果业务要求把 null 统一转成空字符串或空数组,不要依赖 json_encode 自动处理,而应在解码后手动遍历替换。


















