Jackson JSON 到流解析器
Jackson JSON to stream parser
我想将来自 HttpRequest(JSON 对象)的响应作为流处理。这意味着仅过滤我感兴趣的 data
字段并将其作为流 return 并进一步处理(作为 HttpServletResponse 发送)。我不想将它加载到内存中,因为 response.body()
可能很大(1 000 000 多行)。不幸的是,我没有在 JsonParser class 上看到任何可以 return 流的方法。
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
}
}
}
有人知道怎么处理吗?或者也许我应该使用其他一些 library/API?
您已经将输入数据作为流进行处理,因此可以像 HttpServletResponse
一样轻松地将其写入另一个流。
获取要将数据传输到的输出流:
ServletOutputStream out = httpServletResponse.getOutputStream();
并且对于每个数据字符串,将值写入新流:
while ... {
if ("data".equals(parser.getCurrentName())) {
String data = parser.getValueAsString();
out.write(data.getBytes("UTF-8"));
}
}
我想将来自 HttpRequest(JSON 对象)的响应作为流处理。这意味着仅过滤我感兴趣的 data
字段并将其作为流 return 并进一步处理(作为 HttpServletResponse 发送)。我不想将它加载到内存中,因为 response.body()
可能很大(1 000 000 多行)。不幸的是,我没有在 JsonParser class 上看到任何可以 return 流的方法。
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
}
}
}
有人知道怎么处理吗?或者也许我应该使用其他一些 library/API?
您已经将输入数据作为流进行处理,因此可以像 HttpServletResponse
一样轻松地将其写入另一个流。
获取要将数据传输到的输出流:
ServletOutputStream out = httpServletResponse.getOutputStream();
并且对于每个数据字符串,将值写入新流:
while ... {
if ("data".equals(parser.getCurrentName())) {
String data = parser.getValueAsString();
out.write(data.getBytes("UTF-8"));
}
}