PHP解析JSON数值数据:如何获取JSON中的speed字段?
解决JSON获取speed字段的问题
你的问题出在没注意到JSON数据的层级结构——最外层是一个以"353701094714280"为键的对象,speed字段属于这个内层对象,而不是顶层对象的直接属性,所以直接用$json->speed自然找不到对应值。
下面是两种可行的解决方法,你可以按需选择:
方法一:以对象形式访问
先把JSON字符串解码为PHP对象,先进入外层长数字键对应的子对象,再获取speed:
// 原始JSON字符串 $jsonStr = '{"353701094714280": {"dt_server": "2021-09-19 02:24:26", "dt_tracker": "2021-09-17 9:57:56", "lat": "1.059998", "lng": "104.134", "altitude": "0", "angle": "0", "speed": "0", "params": {"pump": "0", "track": "1", "bats": "1", "acc": "0", "batl": "6"}, "loc_valid": "1"}}'; // 解码为PHP对象 $jsonObj = json_decode($jsonStr); // 访问外层键对应的子对象,再取speed(数字开头的属性需用{"键名"}形式访问) $speed = $jsonObj->{"353701094714280"}->speed; // 输出结果:0 echo $speed;
方法二:以关联数组形式访问
如果更习惯数组操作,可以在解码时传入第二个参数true,将JSON转为关联数组:
// 解码为关联数组 $jsonArr = json_decode($jsonStr, true); // 逐层访问数组键获取speed $speed = $jsonArr['353701094714280']['speed']; // 输出结果:0 echo $speed;
如果这个长数字键是动态变化的(比如每次请求都不同),还可以用reset()直接获取顶层对象/数组的第一个子元素,不用写死键名:
// 对象方式 $innerObj = reset($jsonObj); $speed = $innerObj->speed; // 数组方式 $innerArr = reset($jsonArr); $speed = $innerArr['speed'];
内容的提问来源于stack exchange,提问作者Achmad Yadi
相关产品推荐
相关产品推荐

