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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:17:51