当前位置: 首页 > 知识库问答 >
问题:

Android parsing JSON vs JSON Overlay

危宜
2023-03-14

我想知道人们如何看待将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个答案

鲁展
2023-03-14

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

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

但在某些情况下,解决方案 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;
    }
}
 类似资料:

相关问答

相关文章

相关阅读