[英]Jackson JSON to stream parser
I would like to process response from HttpRequest (JSON object) as stream.我想将来自 HttpRequest(JSON 对象)的响应作为流处理。 That's mean filter only data
field which interest me and return it as a stream and process it further (send as HttpServletResponse).这意味着仅过滤我感兴趣的data
字段并将其作为流返回并进一步处理(作为 HttpServletResponse 发送)。 I don't want to load it to memory as the response.body()
might be huge (1 000 000+ lines).我不想将它加载到内存中,因为response.body()
可能很大(1 000 000+ 行)。 Unfortunately I don't see any method on JsonParser class that would return stream.不幸的是,我在 JsonParser 类上没有看到任何会返回流的方法。
HttpResponse<InputStream> response = client.send(httpRequest, BodyHandlers.ofInputStream());
InputStream result = response.body();
JsonFactory factory = new JsonFactory();
try(JsonParser parser = factory.createParser(result)){
while (parser.nextToken() != JsonToken.END_OBJECT) {
if ("data".equals(parser.getCurrentName())) {
parser.getValueAsString(); // it returns correct lines but as String
}
}
}
Does anybody know how to handle it?有人知道如何处理吗? Or maybe I should use some other library/API?或者我应该使用其他一些库/API?
You already process the input data as a stream, so it can easily be written to another stream like an HttpServletResponse
.您已经将输入数据作为流进行处理,因此可以轻松地将其写入另一个流,例如HttpServletResponse
。
Get the outputstream you want to transfer the data to:获取要将数据传输到的输出流:
ServletOutputStream out = httpServletResponse.getOutputStream();
And for each data string, write the value to the new stream:对于每个数据字符串,将值写入新流:
while ... {
if ("data".equals(parser.getCurrentName())) {
String data = parser.getValueAsString();
out.write(data.getBytes("UTF-8"));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.