当使用 json_decode() 解析 API 返回的 JSON 数据时,若直接通过 $obj->appeal->askAmounts 访问却返回 NULL,很可能是对象结构存在多层嵌套(如 appeal 字段下还嵌套了另一个同名 appeal 对象),需准确匹配实际层级结构。
当使用 `json_decode()` 解析 api 返回的 json 数据时,若直接通过 `$obj->appeal->askamounts` 访问却返回 `null`,很可能是对象结构存在多层嵌套(如 `appeal` 字段下还嵌套了另一个同名 `appeal` 对象),需准确匹配实际层级结构。
从 var_dump($dataTwo->appeal) 的输出可见:$dataTwo->appeal 本身是一个 stdClass 对象,其内部再次包含一个名为 appeal 的属性(类型为 stdClass),而真正的 askAmounts 数组就位于这个第二层 appeal 对象中。因此,原始写法:
var_dump($dataTwo->appeal->askAmounts); // ❌ 错误:试图从第一层 appeal 直接取 askAmounts
实际应访问:
var_dump($dataTwo->appeal->appeal->askAmounts); // ✅ 正确:进入第二层 appeal 后再取 askAmounts
为提升代码健壮性,建议在访问前进行空值检查或使用 nullsafe 操作符(PHP 8.0+):
// PHP 8.0+ 推荐(避免 Notice)$askAmounts = $dataTwo?->appeal?->appeal?->askAmounts;// 兼容旧版本的防御性写法if (isset($dataTwo->appeal) && isset($dataTwo->appeal->appeal) && isset($dataTwo->appeal->appeal->askAmounts)) { $askAmounts = $dataTwo->appeal->appeal->askAmounts;} else { $askAmounts = [];}
? 关键提示:
立即学习“PHP免费学习笔记(深入)”;
$dataTwo = json_decode($data);if (json_last_error() !== JSON_ERROR_NONE) { throw new RuntimeException('Invalid JSON: ' . json_last_error_msg());}
始终以实际 var_dump 输出为准——本例中 appeal 是双重嵌套字段,而非单层结构。精准定位层级,是解决此类“数据存在却取不到”问题的核心。