这是我的第一个问题,我希望我没有弄错。
我从'onSuccess()'的返回值中得到了一个讨厌的长json数组,格式如下:
[
{
"label1":"value1",
"label2":"value2",
"label3":"value3",
....
},
{
"label1":"value1",
"label2":"value2",
"label3":"value3",
....
},
....
]
当我尝试将其转换为String并使用jackson通常的'mapper'解析它时,我得到了可怕的内存不足异常。这让我觉得我需要流这个大json代替。
我去看了这里提供的jackson的例子,但是这个例子似乎没有多大帮助
我想知道如果我不能搜索或者我只是一个简单的愚蠢的编程,但如果有人能指导我一个好的例子,那将是非常愉快的。
my current effort:
client.get(
get_all_item_url,
new JsonHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable e) {
....
}
@Override
public void onSuccess(JSONArray response) {
ObjectMapper mapper = new ObjectMapper();
ProductModel[] productModels = null;
try {
productModels = mapper.readValue(response.toString(),TypeFactory.defaultInstance().constructArrayType(ProductModel.class));
} catch (IOException e) {
e.printStackTrace();
}
....
}
});
您应该避免response.toString()
调用。您可以从数组中获取一个元素并对其进行解析。这不是真正的流,但它明显减少了内存消耗
对于大型JSON响应,必须使用流技术。它逐个解析JSON数据:
阅读本文了解详细信息:
http://www.mkyong.com/java/jackson-streaming-api-to-read-and-write-json/