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

如何筛选并解析数组中的对象?JSON数据处理求助

问题解决:筛选符合条件的配送时段对象

问题根源分析

  1. 无效JSON字符串:原始time_slots中的每个字符串存在语法错误(多余的}},),导致JSON解析后结构异常,selected属性无法被正确识别。
  2. 键名不匹配:代码中使用extensionAttributes,但原始JSON的键是extension_attributes(下划线命名),导致无法正确读取time_slots数据。
  3. 冗余筛选逻辑:将单个解析对象放入数组再执行filter完全没必要,且因解析结构异常导致筛选条件失效。

解决方案步骤

1. 修复原始JSON格式

将time_slots中的每个字符串修正为有效JSON,去掉多余的}},并替换为,":

{
  "methods": [
    {
      "extension_attributes": {
        "time_slots": [
          "{\"display_name\":\"Today\",\"date\":\"3\\\\/3\\\\/23\",\"internal_date\":\"2023-03-03\",\"disabled\":0,\"timezone\":\"Asia\\\\/Dubai\",\"shipping_identifier\":\"today\",\"selected\":1,\"disabled\":0}",
          "{\"display_name\":\"Tomorrow\",\"date\":\"3\\\\/3\\\\/23\",\"internal_date\":\"2023-02-02\",\"disabled\":0,\"timezone\":\"Asia\\\\/Dubai\",\"shipping_identifier\":\"today\",\"disabled\":0}"
        ]
      }
    }
  ]
}

2. 修正并优化代码

// 假设filteredShippingMethods对应原始JSON的methods数组
const filteredShippingMethods = [
  {
    "extension_attributes": {
      "time_slots": [
        "{\"display_name\":\"Today\",\"date\":\"3\\\\/3\\\\/23\",\"internal_date\":\"2023-03-03\",\"disabled\":0,\"timezone\":\"Asia\\\\/Dubai\",\"shipping_identifier\":\"today\",\"selected\":1,\"disabled\":0}",
        "{\"display_name\":\"Tomorrow\",\"date\":\"3\\\\/3\\\\/23\",\"internal_date\":\"2023-02-02\",\"disabled\":0,\"timezone\":\"Asia\\\\/Dubai\",\"shipping_identifier\":\"today\",\"disabled\":0}"
      ]
    }
  }
];

const mapDeliveryDates = (deliveryDate) => {
  // 使用原始JSON的下划线键名
  return deliveryDate?.extension_attributes?.time_slots?.reduce((result, timeSlot) => {
    try {
      const parsedSlot = JSON.parse(timeSlot);
      // 直接判断条件,符合则加入结果数组
      if (parsedSlot?.selected === 1) {
        result.push(parsedSlot);
      }
    } catch (error) {
      console.error("解析时段字符串失败:", error, "内容:", timeSlot);
    }
    return result;
  }, []);
};

// 扁平化嵌套数组,得到最终筛选结果
const selectedShippingMethods = filteredShippingMethods.flatMap(mapDeliveryDates);
console.log("选中的配送方式:", selectedShippingMethods);

代码说明

  • 键名匹配:改用extension_attributes与原始JSON结构对齐,确保数据能被正确读取。
  • JSON解析容错:加入try-catch处理解析错误,避免因格式问题导致程序中断。
  • 高效筛选:用reduce直接收集符合条件的对象,替代冗余的map+filter组合;通过flatMap将嵌套的结果数组扁平化,得到简洁的最终结果。

内容的提问来源于stack exchange,提问作者H.Husain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:15:06