【问题标题】:org.json.JSONObject vs Gson library JsonObjectorg.json.JSONObject vs Gson 库 JsonObject
【发布时间】:2017-03-07 06:05:22
【问题描述】:

这两个类有什么区别?

如果有人使用 Gson 库,是否最好使用 com.google.json.JsonObject 而不是 org.json.JSONObject

谁能列出这两种选择的优缺点?

【问题讨论】:

    标签: android json gson android-json


    【解决方案1】:

    主要区别如下:

    1) GSON 可以使用 Object 定义直接创建所需类型的对象。 JSONObject 需要手动解析。

    2) org.json 是一个简单的树形 API。它最大的弱点是它需要您将整个 JSON 文档加载到一个字符串中,然后才能解析它。对于大型 JSON 文档,这可能效率低下。

    3) 到目前为止,org.json 实现的最大弱点是 JSONException。必须在所有 JSON 内容周围放置一个 try/catch 块并不方便。

    4) Gson 是 Android 上用于 JSON 解析的最佳 API。它具有非常小的二进制大小(低于 200 KiB),可以快速进行数据绑定,并具有简单易用的 API。

    5) GSON 和 Jackson 是 Java 世界中管理 JSON 数据最流行的解决方案。

    【讨论】:

    • 对于 JSON 解析器来说,200KiB 以下一点也不小。在这方面,截至今天的 org.json 最新版本是 65KiB,小了很多。
    【解决方案2】:

    市场上有许多 JSON 实现,其中大部分是开源的。每一种都有特定的优点和缺点。

    • 谷歌 GSON
    • 杰克逊
    • org.json 等

    Google GSON click 获取官方文档

    • 提供简单的 toJson() 和 fromJson() 方法将 Java 对象转换为 JSON,反之亦然
    • 允许将预先存在的不可修改对象与 JSON 相互转换
    • 对 Java 泛型的广泛支持
    • 允许对象的自定义表示
    • 支持任意复杂的对象(具有深度继承层次结构和广泛使用的泛型类型)

    Jacksonclick获取官方文件

    • 流式 API 或增量解析/生成:以离散事件的形式读取和写入 JSON 内容
    • 树模型:提供 JSON 文档的可变内存树表示
    • 数据绑定:将 JSON 与 POJO 转换

    一些比较博客点击这里blogs1,blog2

    我个人使用 GSON vs Jackson vs Simple JSON 进行了序列化和反序列化的基准测试

    • 非常小的对象:Google gson 的执行速度比 Jackson 和 Simple JSON 快
    • 大型对象:Google gson 的执行速度比 Jackson 和 Simple JSON 更快

    【讨论】:

    • 那么,就小型和大型对象的性能而言,Google gson 是一个出色的库?
    • 对不起,什么是“简单 JSON”?
    • 嘿@GrabNewTech!看起来你在这里的基准结论中打错了...... afaik GSON 在杰克逊获胜的大文件竞争中失败了
    【解决方案3】:

    我在真正的 Pixel 3 设备 Android 11 上尝试了 456 Kb json 文件。 我需要从数据库创建一个备份文件。模型有 3 个具有一对多关系的对象:Note、Item、Alarm。

    Note -> fields and List<Item>.
    Item -> fields and List<Alarm>.
    Alarm -> fields
    
    Serialization result:
    gson -> 75ms; org.json -> 63ms
    gson -> 83ms; org.json -> 67ms
    gson -> 73ms; org.json -> 62ms
    

    如您所见,默认的 android org.json 比 GSON 快。 如果您有时间为您的模型创建映射,我建议使用默认的 org.json。 如果您想比 gson 更快地创建 json,但比 org.json 更容易,请尝试使用 moshi 或 kotlinx-serialization。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      相关资源
      最近更新 更多