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

如何用Node.js从指定API获取指定port_id的actual_delay数据?

提取指定port_id对应的actual_delay值

我尝试用Node.js从某API提取数据,API返回的JSON结构如下:

{"wait_time": {"port": [{"port_id": "240201","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "31","expected_delay": "31"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "5","expected_delay": "6"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "7","expected_delay": "8"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "7","expected_delay": "6"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "7","expected_delay": "7"}]}},{"port_id": "535502","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "5","expected_delay": "5"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "13","expected_delay": "13"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "74","expected_delay": "68"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "5","expected_delay": "5"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "4","expected_delay": "5"}]}},{"port_id": "230403","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "8","expected_delay": "7"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "5","expected_delay": "5"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "21","expected_delay": "20"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "4","expected_delay": "4"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "4","expected_delay": "4"}]}},{"port_id": "230302","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "1","expected_delay": "1"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "1","expected_delay": "1"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "5","expected_delay": "5"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "2","expected_delay": "2"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "4","expected_delay": "4"}]}},{"port_id": "250602","wait_time_event": {"update_time": "2024-08-20T15:30:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "0","expected_delay": "0"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "8","expected_delay": "9"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "11","expected_delay": "12"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "0","expected_delay": "0"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "0","expected_delay": "0"}]}},{"port_id": "230502","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "3","expected_delay": "3"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "8","expected_delay": "8"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "8","expected_delay": "8"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "12","expected_delay": "11"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "20","expected_delay": "19"}]}},{"port_id": "230404","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "65","expected_delay": "55"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "12","expected_delay": "21"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "17","expected_delay": "18"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "0","expected_delay": "0"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "30","expected_delay": "24"}]}},{"port_id": "240203","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "11","expected_delay": "14"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "19","expected_delay": "12"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "26","expected_delay": "26"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "14","expected_delay": "18"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "7","expected_delay": "6"}]}},{"port_id": "535503","wait_time_event": {"update_time": "2024-08-20T15:40:00","lane": [{"type": "Commercial","sub_type": "Aduana","actual_delay": "12","expected_delay": "8"},{"type": "Commercial","sub_type": "CBP FAST","actual_delay": "10","expected_delay": "10"},{"type": "Commercial","sub_type": "CBP Standard","actual_delay": "10","expected_delay": "10"},{"type": "Commercial","sub_type": "DPS FAST","actual_delay": "10","expected_delay": "10"},{"type": "Commercial","sub_type": "DPS Standard","actual_delay": "10","expected_delay": "10"}]}}]}}

打印数据时,控制台只显示:

"230404"
{
  wait_time: {
    port: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object]
    ]
  }
}

当前使用的代码:

const url=
    ' https://bciswebapi.azurewebsites.net/api/segmentcommercial'

//https://bciswebapi.azurewebsites.net/api/segmentpassenger
//'https://bwt.cbp.gov/api/waittimes'

async function getData(){
    const response = await fetch(url)
    const data= await response.json()
        .then(data=>console.log(data))
}

getData()

解决方法

1. 完整打印JSON结构

Node.js默认打印对象时会截断嵌套内容,用JSON.stringify可以完整输出:

console.log(JSON.stringify(data, null, 2))

2. 提取指定port_id的actual_delay

遍历wait_time.port数组,找到匹配port_id的项,再提取对应lane的actual_delay:

async function getData() {
    const response = await fetch(url.trim()); // 去掉URL前后空格,避免请求错误
    const data = await response.json();
    
    // 指定要查找的port_id
    const targetPortId = "230404";
    
    // 找到目标port
    const targetPort = data.wait_time.port.find(port => port.port_id === targetPortId);
    
    if (targetPort) {
        // 提取所有lane的子类型和实际等待时间
        const actualDelays = targetPort.wait_time_event.lane.map(lane => ({
            sub_type: lane.sub_type,
            actual_delay: lane.actual_delay
        }));
        
        console.log(`port_id ${targetPortId} 的实际等待时间:`);
        console.log(JSON.stringify(actualDelays, null, 2));
    } else {
        console.log(`未找到port_id为${targetPortId}的记录`);
    }
}

getData();

代码说明

  • trim():去除URL开头的空格,避免请求报错
  • find():在port数组中精准匹配目标port_id
  • map():整理lane数据,只保留需要的子类型和实际等待时间,输出更清晰

运行后会输出:

port_id 230404 的实际等待时间:
[
  {
    "sub_type": "Aduana",
    "actual_delay": "65"
  },
  {
    "sub_type": "CBP FAST",
    "actual_delay": "12"
  },
  {
    "sub_type": "CBP Standard",
    "actual_delay": "17"
  },
  {
    "sub_type": "DPS FAST",
    "actual_delay": "0"
  },
  {
    "sub_type": "DPS Standard",
    "actual_delay": "30"
  }
]

内容的提问来源于stack exchange,提问作者Perla De la O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:10:58