<分区>
我正在编写的应用程序中大量使用 JSON 解析。我所做的大部分工作已经使用 Android 的内置 JSONObject 库(是 json-lib 吗?)实现了。
JSONObject 似乎创建了 JSON 字符串中绝对所有内容的实例......即使我最终没有使用所有它们。
我的应用目前运行良好,即使在 G1 上也是如此。
我的问题是:使用像 Jackson 这样的流解析器带来的速度和内存优势值得所有的麻烦吗?
麻烦的是,我的意思是:据我所知,使用 Jackson 而不是内置库有三个缺点:
- 对外部库的依赖。这最终会使您的 .apk 变大。没什么大不了的。
- 您的应用更脆弱。由于解析不是自动完成的,因此它更容易受到正在解析的 JSON 文本更改的影响(也许我对此有误)。
- 编写代码通过流解析器解析 JSON 既丑陋又乏味。
在大多数情况下,我也在使用内置的 JSON 解析器,但最近遇到了一个不适合它的场景:对于某些 Web 服务请求,我收到超过 1 MB 的 JSON 文档。使用内置的 JSON 解析器加载这些需要大量的主内存,并多次导致 OutOfMemoryException
。对于这些场景,流式解析器是更好的选择(尽管使用起来更不方便),内置的 JSON 解析器不提供流式处理,仅提供类 DOM 样式。
对于任何正在寻找适用于 Android 的流式 JSON 解析器的人,我强烈建议使用 Google's GSON .我一开始尝试过 Jackson JSON,它运行良好,直到我尝试构建我的应用程序的发布版本:ProGuard 报告了几个问题,并且正在运行的应用程序因 Jackson 的 的构造函数中神秘的 NullPointerException
而崩溃>ObjectMapper
(尽管在调试版本中一切正常)。即使经过几个小时的尝试,我也无法解决这个问题。然后我切换到 GSON,一切都很顺利。
顺便说一句:GSON 流式 jar 的大小只有 14kB —— 所以没什么好担心的。