Android解析JSON与JSON覆盖

Android解析JSON与JSON覆盖,android,json,parsing,overlay,Android,Json,Parsing,Overlay,我想知道人们对将JSON解析为POJO与使用JSON覆盖对象的利弊有何看法 用例:返回Person JSON文档的REST调用 e、 g [{“名称”:“名称1”},{“名称”:“名称2},…] 解决方案1: 使用GSON、Jackson、JSONObject/JSONArray(手动)等将所有传入的JSON解析到pojo中 结果: class Person { String name; public String getName() { return na

我想知道人们对将JSON解析为POJO与使用JSON覆盖对象的利弊有何看法

用例:返回Person JSON文档的REST调用

e、 g

[{“名称”:“名称1”},{“名称”:“名称2},…]

解决方案1:

使用GSON、Jackson、JSONObject/JSONArray(手动)等将所有传入的JSON解析到pojo中

结果:

class Person {

    String name;

    public String getName() {

        return name;
    }
}
class Person {

    JSONObject json;

    public String getName() {

        json.getString("name");
    }
}
解决方案2:

创建使用JSONObject访问方法的覆盖类

结果:

class Person {

    String name;

    public String getName() {

        return name;
    }
}
class Person {

    JSONObject json;

    public String getName() {

        json.getString("name");
    }
}
特别是,我对Android上有限的系统资源感兴趣。我是想预先承担解析成本并使用更多内存,还是想在数据访问期间(如在ListView中)承担解析成本


这有关系吗?

我通常更喜欢解决方案1

  • 作为单个异步任务下载和解析非常简单。与从web下载相比,解析应该非常快
  • 解析完成后,可以从内存中删除JSON数据,此时所需的内存较低
  • 因此,访问数据的速度比解决方案2中快-如果您想在UI线程中使用数据,例如更新
    列表视图中的项目,则快速访问是必不可少的
  • 但在某些情况下,解决方案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;
        }
    }