如何用JSONStream npm模块解析单个JSON对象的多个嵌套字段?
解决JSONStream解析单个JSON对象多字段的问题
嘿,我刚好碰到过类似的场景,给你两个实用的解决方案,帮你同时提取status.replicas和status.updatedReplicas这两个字段:
方案一:先提取整个status对象(推荐)
这种方式最直观,也方便后续扩展——先把整个status对象解析出来,再在回调里直接获取需要的两个字段。代码如下:
request({ url: 'ssss', verify: 'False', headers: { 'Authorization': 'Bearer zzzz', 'Accept': 'application/json', 'User-Agent': 'zzz' } }) .pipe(JSONStream.parse('status')) .pipe(es.mapSync(function (statusData) { // 直接从status对象中提取两个字段 const replicas = statusData.replicas; const updatedReplicas = statusData.updatedReplicas; console.log(`当前副本数:${replicas},已更新副本数:${updatedReplicas}`); }));
这样做的好处是,你一次就能拿到status下的所有数据,不仅能获取这两个字段,后续如果需要status里的其他字段(比如availableReplicas),直接在回调里加就行,非常灵活。
方案二:用JSONStream的多字段选择器
如果你只想精准匹配这两个字段,可以用JSONStream的嵌套数组选择器,指定要提取的字段路径:
request({/* 配置同上 */}) // 用数组指定路径:先到status,再匹配replicas和updatedReplicas .pipe(JSONStream.parse(['status', ['replicas', 'updatedReplicas']])) .pipe(es.mapSync(function (fieldValue) { // 注意:这里会分别输出两个字段的值,每次回调只拿到一个值 console.log(`字段值:${fieldValue}`); }));
不过这种方式会分两次触发mapSync——第一次返回replicas的值,第二次返回updatedReplicas的值。如果需要把两个值关联起来使用,你得自己做数据收集,所以方案一更适合你的需求。
为什么之前的方法不行?
- 用
JSONStream.parse('status.replicas')只会提取单个字段的值,所以你只拿到了1; - 用
JSONStream.parse('*')会遍历顶层的每个键值对,所以第一个拿到的是kind: Deployment,后续还会输出其他顶层字段,但这不是你想要的。
内容的提问来源于stack exchange,提问作者John Seen
相关产品推荐
相关产品推荐

