org.json.JSONObject против библиотеки Gson JsonObject

Каковы различия между этими двумя классами?

Если кто-то использует библиотеку Gson, предпочтительнее ли использовать com.google.json.JsonObject вместо org.json.JSONObject?

Кто-нибудь может перечислить плюсы и минусы этих двух вариантов?


person iamcrypticcoder    schedule 07.03.2017    source источник


Ответы (3)


Ниже приведены основные отличия:

1) GSON может использовать определение объекта для непосредственного создания объекта нужного типа. JSONObject необходимо анализировать вручную.

2) org.json — это простой древовидный API. Его самая большая слабость заключается в том, что он требует загрузки всего документа JSON в строку, прежде чем вы сможете его проанализировать. Для больших документов JSON это может быть неэффективно.

3) Безусловно, самой большой слабостью реализации org.json является JSONException. Просто неудобно размещать блок try/catch вокруг всех ваших вещей JSON.

4) Gson — лучший API для парсинга JSON на Android. Он имеет очень маленький двоичный размер (менее 200 КиБ), выполняет быструю привязку данных и имеет простой и удобный API.

5) GSON и Jackson — самые популярные решения для управления данными JSON в мире java.

person Mehmood Memon    schedule 07.03.2017
comment
Менее 200 КБ — это совсем не мало для синтаксического анализатора JSON. в связи с этим последняя версия org.json на сегодняшний день составляет 65 КБ, что намного меньше. - person Renato; 21.04.2020

На рынке доступно множество реализаций JSON, и большинство из них имеют открытый исходный код. Каждый из них имеет определенные преимущества и недостатки.

  • Гугл ГСОН
  • Джексон
  • org.json и т. д.

Google GSON нажмите для просмотра официальных документов

  • Предоставьте простые методы toJson() и fromJson() для преобразования объектов Java в JSON и наоборот.
  • Разрешить преобразование уже существующих неизменяемых объектов в JSON и обратно
  • Широкая поддержка Java Generics
  • Разрешить пользовательские представления для объектов
  • Поддержка произвольно сложных объектов (с глубокой иерархией наследования и широким использованием универсальных типов)

Джексон нажмите для просмотра официальных документов

  • Streaming API или добавочный анализ/генерация: чтение и запись содержимого JSON в виде дискретных событий.
  • Модель дерева: обеспечивает изменяемое древовидное представление документа JSON в памяти.
  • Привязка данных: преобразует JSON в POJO и обратно.

Некоторые сравнительные блоги щелкните здесь блоги1, блог2

Я лично провел тест сериализации и десериализации, используя GSON vs Jackson vs Simple JSON.

  • Очень маленький объект: Google gson работает быстрее, чем Jackson и Simple JSON
  • Большие объекты: Google gson работает быстрее, чем Jackson и Simple JSON.
person GrabNewTech    schedule 07.03.2017
comment
Итак, Google gson является превосходной библиотекой с точки зрения производительности для малых и больших объектов? - person Eternalcode; 12.10.2018
comment
Извините, что такое простой JSON? - person beroal; 29.12.2018
comment
привет @GrabNewTech! похоже, вы сделали опечатку в своих выводах о тестах здесь ... afaik GSON провалил соревнование за большие файлы, где победил Джексон - person java_newbie; 05.02.2019

Я экспериментировал с файлом json размером 456 КБ на реальном устройстве Pixel 3 Android 11. Мне нужно создать файл резервной копии из базы данных. Модель имеет 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

Как видите, файл org.json для Android по умолчанию работает быстрее, чем GSON. Если у вас есть время создать сопоставление для вашей модели, я рекомендую использовать файл org.json по умолчанию. Если вы хотите создать json быстрее, чем gson, но проще, чем org.json, попробуйте использовать moshi или, возможно, kotlinx-сериализацию.

person Oleg Tarashkevich    schedule 29.07.2021