首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流式传输json元素

流式传输json元素
EN

Stack Overflow用户
提问于 2013-11-18 19:45:30
回答 2查看 644关注 0票数 1

假设我有一个如下所示的json:

代码语言:javascript
复制
{"body":"abcdef","field":"fgh"}

现在假设'body‘元素的值很大(~100MB或更大)。我希望流出body元素的值,而不是将其存储在字符串中。我该怎么做呢?有没有什么Java库可以用来做这件事?

这是当出现较大的json值时,使用OutOfMemoryException失败的代码行:

代码语言:javascript
复制
String inputStreamString = (String) JsonPath.read(textValue.toString(), "$.body");

这里的'textValue‘是一个hadoop.io.Text对象。我假设OutOfMemory错误的发生是因为我们试图像toString() (创建一个新对象)和JsonPath.read()这样的方法调用,所有这些都是在内存中完成的。我需要知道在处理大型textValue对象时是否有一种方法可以采用。如果您需要更多信息,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2017-02-22 02:02:27

JsonSurfer非常适合于通过选择性提取来处理非常大的JSON数据。

示例如何在JSON中冲浪,收集监听器中的匹配值:

代码语言:javascript
复制
BufferedReader reader = new BufferedReader(new FileReader(jsonFile));
JsonSurfer surfer = new JsonSurfer(GsonParser.INSTANCE, GsonProvider.INSTANCE);
SurfingConfiguration config = surfer.configBuilder().bind("$.store.book[*]", new JsonPathListener() {
        @Override
        public void onValue(Object value, ParsingContext context) throws Exception {
            JsonObject book = (JsonObject) value;
        }
    }).build();
surfer.surf(reader, config);
票数 3
EN

Stack Overflow用户

发布于 2013-11-18 19:53:18

Jacksongenerating and processing JSON数据提供了一个流式应用编程接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20046962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档