如何在嵌套JSON中筛选http开头的字段值及object-scan实现
基于object-scan实现嵌套JSON的http开头值筛选
完全可以通过object-scan完成这类嵌套JSON的全层级值筛选,不需要手动编写递归遍历的冗余逻辑。
核心实现逻辑
- 自动跳过所有非字符串类型的节点(包括嵌套对象、数字、布尔值等)
- 对所有字符串类型的值,判断其是否以
http为起始字符 - 不依赖固定的字段路径或嵌套层级深度,无论JSON结构嵌套多少层都可以正常遍历到所有目标节点
可直接运行的代码示例
首先通过npm安装依赖:npm install object-scan
具体实现代码如下:
const objectScan = require('object-scan'); // 修正为合法结构的示例嵌套JSON(原示例多了冗余闭合大括号) const nestedJson = { "a": "https://example1.com", "b": { "c": "https://example2.com", "d": { "e": "www.example3.com" } }, "f": { "g": "https://example4.com" } }; // 构造筛选规则 const getHttpStartedValues = objectScan( // 匹配JSON结构中全层级的所有节点,不限制路径深度 ['**'], { // 自定义值匹配判断规则 filterFn: ({ value }) => { // 仅保留满足两个条件的值:是字符串、且开头为http return typeof value === 'string' && value.startsWith('http'); }, // 配置返回内容为匹配到的节点值,而非字段路径 rtn: 'value' } ); // 执行筛选 const result = getHttpStartedValues(nestedJson); console.log(result);
运行上述代码后,控制台输出的结果完全符合预期:['https://example1.com', 'https://example2.com', 'https://example4.com']
常见注意事项
- 示例中的
www.example3.com因为不以http开头,会被自动过滤,不需要额外编写判断逻辑 - 后续如果需要限定筛选的路径范围,只需要修改第一个参数的路径匹配规则即可,比如仅筛选b节点下的http值,就可以把匹配规则改成
['b.**'],不需要改动核心的过滤判断逻辑 - 相比手动编写递归遍历的实现,这种写法在嵌套结构调整时的维护成本更低。
内容的提问来源于stack exchange,提问作者RAMESHKUMAR
相关产品推荐
相关产品推荐

