JSON:杰克逊流解析器 - 它真的值得吗?

syn*_*nic 15 android json jackson

我在我正在编写的应用程序中大量使用JSON解析.我所做的大部分工作已经使用Android内置的JSONObject库实现(是json-lib吗?).

JSONObject似乎在JSON字符串中创建了绝对所有内容的实例......即使我最终没有使用它们.

我的应用程序目前运行得很好,即使在G1上也是如此.

我的问题是:使用像杰克逊这样的流解析器的速度和内存优势是否值得一试?

麻烦,我的意思是:据我所知,使用Jackson而不是内置库有三个缺点:

  1. 对外部库的依赖.这使你的.apk最终更大.没什么大不了的.
  2. 你的应用程序更脆弱.由于解析不是自动完成的,因此它更容易受到它正在解析的JSON文本的更改(可能我对此错了).
  3. 编写代码以通过流解析器解析JSON是丑陋和乏味的.

sve*_*ven 6

我在大多数情况下也使用内置JSON解析器,但最近步入了一个不适合的场景:对于某些Web服务请求,我收到超过1 MB的JSON文档.使用内置JSON解析器加载这些内容需要大量的主内存并导致OutOfMemoryException多次.对于这些场景,流式解析器是更好的选择(即使它在使用中更不方便),并且内置的JSON解析器不提供流式传输,而只提供类似DOM的样式.

对于任何寻找Android的流式JSON解析器的人,我强烈建议使用Google的GSON.我一开始尝试过杰克逊JSON,它工作正常,直到我尝试构建我的应用程序的发布版本:ProGuard报告了几个问题,正在运行的应用程序在NullPointerExceptionJackson的构造函数中崩溃了ObjectMapper(尽管在调试版本中一切正常) .即使经过几个小时的尝试,我也无法解决这个问题.然后我转而使用GSON,一切都像魅力一样.

顺便说一句:GSON仅限流媒体的jar只有14kB的大小 - 所以没什么好担心的.


yan*_*nko 2

我猜你已经基本回答了你自己的问题。:)
我自己使用内置的 JSON 解析器,并且从未寻找替代方案。

编辑:现在我正在使用DroidParts中基于注释的薄包装器。