You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中从Shiprocket API返回的JSON提取指定字段?

解决Shiprocket API JSON数据提取问题

错误原因

  1. json_decode($json)默认返回对象实例,你用数组下标$data['shipment_status']访问会报错;
  2. 返回数据的最外层是数组,且目标字段处于多层嵌套结构中,直接访问无法定位到对应值。

正确提取代码

方式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:37:45