我想知道人们如何看待将JSON解析成POJOs与使用JSON覆盖对象的利弊。
用例:返回Person JSON文档的REST调用。
例如。
[{name:“name1”},{“name:”name2},…]
解决方案1:
使用GSON、Jackson、JSONObject/JSONArray(手动)等将所有传入的JSON解析到POJO中。
结果:
class Person {
String name;
public String getName() {
return name;
}
}
解决方案2:
创建使用JSONObject访问方法的覆盖类。
结果:
class Person {
JSONObject json;
public String getName() {
json.getString("name");
}
}
特别是,我对Android上有限的系统资源感兴趣。我是希望预先承担解析成本并使用更多内存,还是希望在数据访问期间(如在ListView中)承担解析成本。
有关系吗?
我通常更喜欢解决方案1。
但在某些情况下,解决方案 2 应该会产生更好的结果。就像有成千上万的人或数据变化比你解析它的速度快一样。ListView
仅请求当前可见的数据,因此分析将仅按需完成,并且或多或少独立于不可见项的数据量。
如果解析单个项目需要很长时间,解决方案2也可以与异步方法一起使用,例如与ListView
s一起使用的异步图像加载器。在这种情况下,我会使用如下所示的东西,因为这可以防止解析需要一直重复相同的对象。
class Person {
boolean parsed;
String name;
JSONObject json;
public String getName() {
if (!parsed) {
name = json.getString("name");
json = null;
parsed = true;
}
return name;
}
}