JSON:Парсер потока Джексона — стоит ли оно того?[закрыто]

StackOverflow https://stackoverflow.com/questions/2467374

  •  20-09-2019
  •  | 
  •  

Вопрос

Я довольно активно использую анализ JSON в приложении, которое пишу.Большая часть того, что я сделал, уже реализована с использованием встроенной в Android библиотеки JSONObject (это json-lib?).

JSONObject, похоже, создает экземпляры абсолютно всего в строке JSON...даже если я не буду использовать их все.

Мое приложение в настоящее время работает довольно хорошо, даже на G1.

Мой вопрос таков:Стоит ли всех заморачиваться выигрыш в скорости и памяти от использования потокового анализатора, такого как Джексон?

Под проблемой я имею в виду следующее:Насколько я могу судить, у использования Jackson вместо встроенной библиотеки есть три недостатка:

  1. Зависимость от внешней библиотеки.В конечном итоге ваш .apk станет больше.Ничего страшного.
  2. Ваше приложение более хрупкое.Поскольку синтаксический анализ не выполняется автоматически, он более уязвим к изменениям в анализируемом тексте JSON (возможно, я ошибаюсь на этот счет).
  3. Написание кода для анализа JSON с помощью потокового анализатора — уродливое и утомительное занятие.
Это было полезно?

Решение

Думаю, вы в значительной степени ответили на свой вопрос.:)
Сам использую встроенный парсер JSON и никогда не искал альтернативы.

РЕДАКТИРОВАТЬ:Теперь я использую тонкую оболочку на основе аннотаций от Части дроида.

Другие советы

Я также в большинстве случаев использую встроенный парсер JSON, но недавно столкнулся со сценарием, где он не подходит:По некоторым запросам веб-сервиса я получаю документы JSON размером более 1 МБ.Загрузка их с помощью встроенного анализатора JSON требует огромных объемов оперативной памяти и приводит к OutOfMemoryException несколько раз.Для этих сценариев потоковый анализатор является лучшим выбором (хотя он более неудобен в использовании), а встроенный анализатор JSON не обеспечивает потоковую передачу, а только стиль, подобный DOM.

Всем, кто ищет потоковый анализатор JSON для Android, я настоятельно рекомендую использовать GSON от Google.Сначала я попробовал Jackson JSON, и он работал нормально, пока я не попытался создать финальную версию своего приложения:ProGuard сообщил о нескольких проблемах, и работающее приложение вылетело с загадочной NullPointerException в конструкторе Джексона ObjectMapper (хотя в отладочной версии все работало нормально).Даже после нескольких часов попыток я не смог это исправить.Затем я переключился на GSON, и все заработало как часы.

КСТАТИ:Размер jar-файла GSON, предназначенного только для потоковой передачи, составляет всего 14 КБ, так что беспокоиться не о чем.

Я думаю, вопрос в том, достаточно ли хорош встроенный.Если это так, то минимизация зависимостей зачастую является хорошей стратегией.Достаточно хорошо может относиться как к эффективности, так и к простоте использования.

Как бы то ни было, у Джексона также есть приличная древовидная модель и полная привязка данных.Древовидная модель значительно быстрее, чем анализатор по умолчанию (анализ в 3–5 раз быстрее на J2SE, вероятно, аналогично на других платформах, таких как Android, сама древовидная модель, вероятно, также более эффективна).Или:если вам не нужна зависимость от второго jar (сопоставитель необходим для древовидной модели и привязки данных), написать собственное дерево для ваших вариантов использования тоже просто.Либо используйте базовые HashMap/ArrayList/обертки, либо создайте свои собственные классы, если хотите.В Builder будет около 40 строк кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top