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

如何根据serial_number或name字段过滤复杂嵌套JSON数据

嵌套JSON查询实现方案

本实现支持serial_number和name两种查询条件,自动处理序列号前导零匹配问题,所有符合条件的记录都会完整返回,即使存在重复name也会返回全部匹配结果。

核心实现代码

// 参数说明:data 为待查询的嵌套JSON数组,query 为查询条件对象
function searchNestedData(data, query) {
    const result = [];
    // 遍历所有行政区
    data.forEach(districtItem => {
        // 遍历行政区下的所有选区
        districtItem.ward_no.forEach(wardItem => {
            // 合并当前选区下的grievance、general两类记录统一匹配
            const allRecords = [...wardItem.grievance, ...wardItem.general];
            allRecords.forEach(record => {
                let isMatch = false;
                // 按名称匹配
                if (query.name) {
                    isMatch = record.name === query.name;
                }
                // 按序列号匹配,自动忽略前导零
                if (query.serial_number) {
                    const targetSn = Number(query.serial_number);
                    const recordSn = Number(record.serial_number);
                    isMatch = targetSn === recordSn;
                }
                if (isMatch) {
                    result.push(record);
                }
            })
        })
    })
    return result;
}

使用示例

1. 按名称查询

const queryByName = {
   name: "Bruno Fernandes"
};
const nameResult = searchNestedData(原始JSON数据, queryByName);
// 返回结果:[{serial_number: "0018", name: "Bruno Fernandes"}]

2. 按序列号查询

const queryBySn = {
   serial_number: "18"
};
const snResult = searchNestedData(原始JSON数据, queryBySn);
// 返回结果和按名称查询结果一致

扩展说明

如果需要同时返回匹配记录所属的行政区、选区信息,只需要在push结果时,把对应的districtItem.district、wardItem.ward字段合并到record对象中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:36:11