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

如何遍历嵌套JSON数组查找指定event并按sent字段排序?

解析嵌套JSON并筛选最新天气预警的解决方案

问题分析

你的代码存在两个核心问题:

  1. 错误地将features当作对象访问:json['features']['properties']['event'],实际上features是一个数组,必须通过索引遍历或数组方法处理。
  2. 仅读取数组第一个元素,无法遍历所有匹配event的项,也没有按sent字段排序获取最新事件。

修正后的完整代码

if (input == 'Special Weather Statement') {
  var url = "https://api.weather.gov/alerts?zone=AKZ201";
  var slide = SlidesApp.getActivePresentation().getSelection().getCurrentPage();
  var res = UrlFetchApp.fetch(url);
  var content = res.getContentText();
  var json = JSON.parse(content);
  Logger.log(json);

  // 1. 提取features数组并筛选匹配指定event的项
  var filteredAlerts = json.features.filter(function(feature) {
    return feature.properties && feature.properties.event === input;
  });

  // 2. 按sent字段降序排序,获取最新的预警
  filteredAlerts.sort(function(a, b) {
    var dateA = new Date(a.properties.sent);
    var dateB = new Date(b.properties.sent);
    return dateB - dateA; // 降序排列,最新的在前
  });

  // 3. 处理筛选后的结果
  if (filteredAlerts.length > 0) {
    var latestAlert = filteredAlerts[0];
    var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 20, 259, 420, 60);
    var textRange = shape.getText();
    var description = latestAlert.properties.description.replaceAll('\n',' ');
    textRange.setText(description);
    textRange.getTextStyle().setFontSize(17).setForegroundColor('#ffffff').setFontFamily("Libre Franklin");
  } else {
    // 没有匹配的预警时的处理逻辑
    Logger.log("No matching Special Weather Statement found");
  }
}

关键代码说明

  • 筛选匹配项:使用Array.filter()遍历所有features,只保留properties.event等于输入值的项,同时增加feature.properties的存在性检查,避免空值报错。
  • 按时间排序:使用Array.sort()将筛选后的预警按sent时间戳降序排列,通过new Date()将字符串转换为日期对象进行比较,确保最新的预警排在数组首位。
  • 结果处理:先判断筛选结果是否为空,再取第一个元素(最新预警)进行后续的幻灯片文本插入操作,避免无匹配时出现错误。

额外优化建议

  • 可以将input参数化,让代码支持任意事件类型的查询,而不仅仅是固定的'Special Weather Statement'。
  • 若需要显示所有匹配的预警,可以遍历filteredAlerts数组,逐个插入文本框到幻灯片中。

内容的提问来源于stack exchange,提问作者kait0216

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:05:17