PHP获取含空格键的嵌套JSON值报错,求解决方法
问题原因分析
- 数据类型不匹配:从
print_r输出能看到,json_decode解析后得到的是关联数组,但代码里用了对象访问语法(->),这直接导致了“Trying to get property of non-object”的报错。 - 内层foreach逻辑错误:遍历
$entr->values(实际应为数组$entr['values'])时,$valores拿到的是单个键对应的值(比如"INC000000001"),而非整个values集合,后续尝试在字符串上调用对象属性,自然报错。
修正后的代码方案
方案一:使用数组访问语法(匹配当前解析结果)
<?php $response = curl_exec($curl); // 显式指定解析为关联数组,确保类型统一 $data = json_decode($response, true); foreach($data['entries'] as $entr) { // 直接访问values数组中的目标键,无需内层遍历 $entry_id = $entr['values']['Entry ID']; $submit_date = $entr['values']['Submit Date']; // 此处可添加值的处理逻辑,比如打印或存储 echo "Entry ID: {$entry_id}, Submit Date: {$submit_date}\n"; } ?>
方案二:使用对象访问语法(调整解析模式)
如果偏好对象方式访问,确保json_decode不传入第二个参数(默认解析为对象),同时修正逻辑:
<?php $response = curl_exec($curl); // 默认解析为对象,不传入第二个参数 $data = json_decode($response); foreach($data->entries as $entr) { // 直接访问values对象的带空格属性 $entry_id = $entr->values->{'Entry ID'}; $submit_date = $entr->values->{'Submit Date'}; echo "Entry ID: {$entry_id}, Submit Date: {$submit_date}\n"; } ?>
关键注意点
- 当JSON键名包含空格时,数组访问用
['键名'],对象访问用->{'键名'},两种方式都能正常取值。 - 无需遍历
values集合:它是存储所有字段的容器,直接访问目标键即可,多余的内层遍历会导致逻辑错误。
内容的提问来源于stack exchange,提问作者Dark2f
相关产品推荐
相关产品推荐

