gpt4 book ai didi

java - 处理巨大的 JSON 响应

转载 作者:行者123 更新时间:2023-12-02 05:31:09 32 4
gpt4 key购买 nike

我认为我需要重写应用程序的一些模块,因为当渲染的实体数量增加时,它也会失败并出错。目前,我正在使用 JacksonHttpClient。尽管我非常信任 jackson ,但有件事告诉我问题出在第二个库上。 HttpClient 可以处理大响应吗? (例如 this one 大约 400 行)

除此之外,在我的应用程序中,我解析请求的方式如下:

public Object handle(HttpResponse response, String rootName) {
try {
String json = EntityUtils.toString(response.getEntity());
// better "new BasicResponseHandler().handleResponse(response)" ????
int statusCode = response.getStatusLine().getStatusCode();
if ( statusCode >= 200 && statusCode < 300 ) {
return createObject(json, rootName);
}
else{
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public Object createObject (String json, String rootName) {
try {
this.root = this.mapper.readTree(json);
String className = Finder.findClassName(rootName);
Class clazz = this.getObjectClass(className);
return mapper.treeToValue(root.get(rootName), clazz);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

如何改进这段代码,使其在处理大型响应时更加高效?

提前致谢!

最佳答案

无需创建String json,如 ObjectMapper#readTree也可以接受InputStream。例如,这会稍微更有效:

public Object handle(HttpResponse response, String rootName) {
try {
int statusCode = response.getStatusLine().getStatusCode();
if ( statusCode >= 200 && statusCode < 300 ) {
return createObject(response.getEntity().getContent(), rootName);
}
else{
return null;
}
} catch (Exception e) {
throw new RuntimeException(e);
}

}

public Object createObject (InputStream json, String rootName) {
try {
this.root = this.mapper.readTree(json);
String className = Finder.findClassName(rootName);
Class clazz = this.getObjectClass(className);
return mapper.treeToValue(root.get(rootName), clazz);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

关于java - 处理巨大的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25530679/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com