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

Groovy处理超大JSON如何类似StAX解析仅提取目标对象属性

解决方案

命令行工具(无需编码)

直接使用轻量级JSON处理工具jq即可,它原生支持流式解析模式,无需全量加载JSON文件,内存占用稳定在MB级,完全不会触发OOM。
针对你的场景,提取a.b.c下id为some-key的对象的this属性,命令示例如下:

jq --stream 'fromstream(inputs | select((.[0][0] == "a" and .[0][1] == "b" and .[0][2] == "c") and (.[0][3] == "id" and .[1] == "some-key" or .[0][3] == "this"))) | .this' 你的大文件路径.json

流式处理模式会自动跳过体积庞大的d、e子树,仅解析匹配路径的目标节点,哪怕JSON文件达到GB级也可以正常处理。

JVM生态工具(可集成到代码中)

如果需要把提取逻辑集成到Java/Groovy项目中,不需要自行编写解析器,直接使用Jayway JsonPath库即可,它底层基于Jackson流式解析器实现,会自动跳过不需要的大节点,无需全量加载文档。
首先引入依赖(Gradle示例):

implementation 'com.jayway.jsonpath:json-path:2.8.0'

提取代码示例:

import com.jayway.jsonpath.JsonPath
import java.io.FileInputStream

// 直接从文件输入流读取,全程不会加载全量JSON内容
def targetValue = JsonPath.read(new FileInputStream("你的大文件路径.json"), "\$.a.b.c[?(@.id == 'some-key')].this")
println targetValue // 输出 is the field I want

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:21:01