Ответ 1
Угадайте, что вы в значительной степени ответили на свой вопрос.:)
С помощью встроенного анализатора JSON я и никогда не искал альтернативы.
EDIT: теперь я использую тонкую оболочку на основе аннотаций из DroidParts.
Я использую синтаксический разбор JSON в приложении, которое я пишу. Большинство из того, что я сделал, уже реализовано с помощью Android, встроенного в библиотеку JSONObject (это json-lib?).
JSONObject, похоже, создает экземпляры абсолютно все в строке JSON... даже если я не использую их все.
Мое приложение работает довольно хорошо, даже на G1.
Мой вопрос заключается в следующем: нужны ли скорости и памяти использование анализатора потока, такого как Джексон, на все проблемы?
По причине я имею в виду следующее: насколько я могу судить, есть три недостатка в использовании Джексона вместо встроенной библиотеки:
Угадайте, что вы в значительной степени ответили на свой вопрос.:)
С помощью встроенного анализатора JSON я и никогда не искал альтернативы.
EDIT: теперь я использую тонкую оболочку на основе аннотаций из DroidParts.
Я также использую встроенный парсер JSON в большинстве случаев, но недавно перешел в сценарий, где он не подходит: для некоторых запросов веб-сервисов я получаю документы JSON объемом более 1 МБ. Загрузка их с помощью встроенного анализатора JSON требует огромных объемов основной памяти и несколько раз приводила к OutOfMemoryException
. Для этих сценариев лучше всего использовать потоковой парсер (хотя он более неудобен в использовании), а встроенный анализатор JSON не обеспечивает потоковое вещание, а только стиль, подобный DOM.
Для тех, кто ищет потоковый анализатор JSON для Android, я могу настоятельно рекомендовать использовать Google GSON. Я сначала пробовал Jackson JSON, и он работал нормально до тех пор, пока я не попытался создать версию моего приложения: ProGuard сообщил о нескольких проблемах, и запущенное приложение разбилось с таинственным NullPointerException
в конструкторе Jackson ObjectMapper
(хотя все работало отлично в отладочной версии). Даже после нескольких часов попыток я не смог это исправить. Затем я переключился на GSON, и все работало как шарм.
BTW: банкомат только для GSON имеет размер только 14 КБ, поэтому ничего не нужно беспокоиться.
Я думаю, вопрос в том, достаточно ли встроенного. Если это так, конечно, минимизация зависимостей часто является хорошей стратегией. Достаточно хорошо можно сказать об эффективности и простоте использования.
Для того, что стоит, у Джексона также есть достойная древовидная модель, а также полная привязка данных. Дерево модели значительно быстрее, чем парсер по умолчанию (синтаксический анализ на J2SE на 3x-5 раз быстрее, вероятно, аналогично на других платформах, таких как Android, сама модель дерева также более эффективна). Или: если вы не хотите, чтобы зависимость от второй банки (необходим сопоставитель для привязки дерева и привязки данных), писать собственное дерево для покрытия ваших случаев использования тоже просто. Либо используйте базовые HashMap/ArrayList/wrappers, либо имеете свои собственные классы, если хотите. Builder может составлять 40 строк кода.