0

我想知道人们如何看待将 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 中。

有关系吗?

4

1 回答 1

0

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

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

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

如果解析单个项目需要很长时间,解决方案 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;
    }
}
于 2012-08-25T00:00:13.290 回答