【问题标题】:Android parsing JSON vs JSON OverlayAndroid 解析 JSON 与 JSON 覆盖
【发布时间】:2012-08-24 23:15:54
【问题描述】:

我想知道人们如何看待将 JSON 解析为 POJO 与使用 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 中。

重要吗?

【问题讨论】:

    标签: android json parsing overlay


    【解决方案1】:

    我通常更喜欢解决方案 1。

    1. 作为单个异步任务下载和解析非常简单。与从网络下载相比,解析速度应该相当快。
    2. 解析完成后可以从内存中删除 JSON 数据,此时所需的内存较低。
    3. 然后访问数据比在解决方案 2 中更快 - 如果您想在 UI 线程中使用它,例如快速访问是必不可少的。更新 ListView 中的项目。

    但在某些情况下,解决方案 2 应该会产生更好的结果。就像当有成千上万的人或者数据的变化比你解析它的速度快时一样。 ListView 仅请求当前可见的数据,因此解析将仅按需进行,并且或多或少独立于不可见项目的数据量。

    如果解析单个项目需要很长时间,解决方案 2 也可以与异步方法一起使用,例如与 ListViews 一起使用的异步图像加载器。在这种情况下,我会使用类似下面的东西,因为这样可以防止需要一直对同一个对象重复解析。

    class Person {
    
        boolean parsed;
        String name;
        JSONObject json;
    
        public String getName() {
            if (!parsed) {
                name = json.getString("name");
                json = null;
                parsed = true;
            }
            return name;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2017-08-13
      • 2014-03-18
      • 2016-08-04
      相关资源
      最近更新 更多