Node.js中使用jsonpath-finder提取JSON动态数组ID的方法
使用jsonpath-finder批量提取JSON中的动态ID
场景说明
需要基于npm包jsonpath-finder,从固定结构的JSON文件中提取所有动态生成的ID,最终输出ID组成的数组。该类JSON结构中动态ID均为顶层对象的键名,单文件内可包含n组ID对应的数据子数组。
示例文件(Sample.json)
[ { "4787843417861749370": [ { "type": "Fast delivery", "subtype": "verizon", "status": "Dispatched", "reason": "null", "currency_code": "USD" } ], "1502698381711920904": [ { "type": "Normal delivery", "subtype": "Cisco fiber", "status": "Added Cart", "reason": "null", "currency_code": "USD" } ] } ]
期望输出
[4787843417861749370,1502698381711920904]
实现步骤
- 安装依赖
执行命令安装需要的npm包:npm install jsonpath-finder - 编写提取逻辑
利用jsonpath的键名匹配语法,直接定位顶层对象的所有键名,不需要提前预知ID值,即可批量提取所有动态ID,参考代码如下:const jsonPath = require('jsonpath-finder'); const fs = require('fs'); // 读取本地目标JSON文件 const fileContent = fs.readFileSync('./Sample.json', 'utf8'); const data = JSON.parse(fileContent); // jsonpath规则说明: // $[0] 定位最外层数组的第一个对象 // .* 匹配该对象下的所有属性 // 末尾加~ 表示返回匹配属性的键名而非属性值 const rawIds = jsonPath.query(data, '$[0].*~'); // 注意:示例ID长度为19位,超过JS默认Number类型的最大安全整数范围,直接转Number会出现精度丢失 // 业务需要数字类型就转BigInt,需要字符串类型直接用rawIds即可 const idList = rawIds.map(id => BigInt(id)); console.log(idList); - 适配说明
该写法不限制顶层对象下的动态ID数量,不管包含多少组ID对应的数据子数组,都可以一次性提取全部ID,符合批量处理的需求。
提示:如果你的业务场景不需要做数值计算,建议直接保留提取到的字符串格式ID,避免跨语言、跨场景的类型兼容问题。
内容的提问来源于stack exchange,提问作者ArrchanaMohan
相关产品推荐
相关产品推荐

