如何在PHP中从Shiprocket API返回的JSON提取指定字段?
解决Shiprocket API JSON数据提取问题
错误原因
json_decode($json)默认返回对象实例,你用数组下标$data['shipment_status']访问会报错;- 返回数据的最外层是数组,且目标字段处于多层嵌套结构中,直接访问无法定位到对应值。
正确提取代码
方式1:使用对象访问(默认解码行为)
// 解码JSON并检查是否成功 if ($data = json_decode($json)) { // 取外层数组的第一个元素,获取tracking_data对象 $tracking_data = $data[0]->tracking_data; // 提取shipment_status $shipment_status = $tracking_data->shipment_status; // 从shipment_track数组的第一个对象中提取awb_code和courier_company_id $shipment_track_item = $tracking_data->shipment_track[0]; $awb_code = $shipment_track_item->awb_code; $courier_company_id = $shipment_track_item->courier_company_id; // 可根据需求使用变量,比如打印输出 echo "shipment_status: {$shipment_status}\n"; echo "awb_code: {$awb_code}\n"; echo "courier_company_id: {$courier_company_id}\n"; } else { // 解码失败时输出错误信息,方便排查 echo "JSON解码失败:" . json_last_error_msg(); }
方式2:转为关联数组访问(解码时加第二个参数true)
// 解码为关联数组并检查是否成功 if ($data = json_decode($json, true)) { // 取外层数组的第一个元素,获取tracking_data数组 $tracking_data = $data[0]['tracking_data']; // 提取shipment_status $shipment_status = $tracking_data['shipment_status']; // 从shipment_track数组的第一个元素中提取awb_code和courier_company_id $shipment_track_item = $tracking_data['shipment_track'][0]; $awb_code = $shipment_track_item['awb_code']; $courier_company_id = $shipment_track_item['courier_company_id']; // 可根据需求使用变量,比如打印输出 echo "shipment_status: {$shipment_status}\n"; echo "awb_code: {$awb_code}\n"; echo "courier_company_id: {$courier_company_id}\n"; } else { // 解码失败时输出错误信息,方便排查 echo "JSON解码失败:" . json_last_error_msg(); }
额外提示
如果json_decode返回null,必须通过json_last_error_msg()获取具体错误原因,常见问题包括:JSON格式不合法、存在未转义的特殊字符、编码不兼容等。
内容的提问来源于stack exchange,提问作者Vssoft
相关产品推荐
相关产品推荐

