Какой из них использовать? JSONObject от org.json VS JsonObject от javax.json
Это мой первый пост. Будучи начинающим разработчиком Android, я почти ежедневно читаю сообщения SO по различным темам, но по этому вопросу я не нашел никакой помощи от Google или SO.
Мои исследования:
Поиск этого вопроса был более сложным, чем обычно, потому что поисковые системы, похоже, не заботятся о чувствительности к регистру, что очень важно в этой проблеме. Поиск в Google только дал мне ссылки на сами классы, старые статьи или совершенно ненужные статьи. Ближе всего я получил JSONArray vs JSONObject, и это совершенно другой вопрос. Поиск SO дал те же результаты. Насколько я могу судить, ВСЕ подходящие сообщения на SO относятся к JSONObject, а не JsonObject.
Ни документация Oracle, ни json.org не упомянули другую сторону, ни страницу JSONObject разработчика Android, которая использует библиотеку org.json.
http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
http://www.json.org/javadoc/org/json/JSONObject.html
Я бы также разместил ссылку на страницу ссылки на Android для JSONObject, но мой представитель как новичок слишком низок.
История проблемы:
Я читал о кодировании и декодировании Json со страницы Oracle, и я попытался скопировать и вставить в свою IDE AndriodStudio, которая сразу же произвела ошибку, для которой она не предлагала оператора импорта, как это обычно бывает. Я пришел узнать, что означает, что класс не является частью встроенных библиотек.
Проблема заключалась в том, что код, который я вставил в используемый JsonObject (который поступает из библиотеки javax.json), а не JSONObject (который поступает из библиотеки org.json). Когда я заметил разницу в случае между страницей Android и страницей Oracle, я изменил свой код от Json до JSON, и сразу же моя IDE предложила оператор import org.json.
Вопрос (ы):
Почему класс Oracle не является частью библиотек по умолчанию, когда есть внешняя библиотека?
Является ли JSON старым, устаревшим способом и Json новым, правильным способом?
Являются ли они функционально идентичными? Если нет, укажите примеры?
Являются ли некоторые ситуации лучше для одного, а некоторые лучше для другого?
ULTIMATELY, который я должен использовать, и почему (если они еще не покрыты)?
Если, javax.json, где самое лучшее (безопасное) место для загрузки этой библиотеки)?
Ответы
Ответ 1
Бит поздно, но я хотел поделиться своим мнением об этом.
Недавно я столкнулся с этой проблемой, когда я нашел проект Java с обеими библиотеками, и они были использованы в то же время.
Я думаю, что org.json
легче читать и использовать по двум основным причинам (для моих нужд):
-
JsonObject неизменен. Вы не можете добавлять новые пары ключ/значение в уже существующий JsonObject (ссылка здесь: javax.json: Добавить новый JsonNumber в существующий JsonObject)
-
Для корректной печати JsonObject или JsonArray требуется несколько строк, тогда как для JSONObject или JSONArray требуется только одна строка. Пример:
StringWriter sw = new StringWriter();
Map<String, Object> properties = new HashMap<>();
properties.put(JsonGenerator.PRETTY_PRINTING, true);
JsonWriterFactory writerFactory = Json.createWriterFactory(properties);
JsonWriter jsonWriter = writerFactory.createWriter(sw);
jsonWriter.writeObject(jsonObject); //JsonObject created before
jsonWriter.close();
String prettyPrintedJSON = sw.toString();
Это код, который я использую, чтобы получить отступы JSON для записи в файл. И с org.json мне нужно только jsonObject.toString(4)
.
Еще одно отличие - конструкторы. Для создания JSON с javax.json
вам понадобится JsonObjectBuilder
. Еще один шаг, который можно избежать.
Я уверен, что есть больше различий (не уверен, возможно ли создать JsonObject
из String), но это мои мысли.
Ответ 2
Я рекомендую использовать Google json-simple инструментарий для работы с объектами JSON. Он предоставляет полезные функции и не зависит от внешних библиотек, которые оказались огромной проблемой при разработке приложений для Android.
Чтобы ответить на ваш вопрос: если вы не хотите использовать json-simple в проекте, вы должны использовать JSONObject из org.json, потому что он предоставлен Android JDK. Для получения дополнительной информации см. http://developer.android.com/reference/org/json/JSONObject.html.
Ответ 3
-
org.json
не содержит класс синтаксического анализа для разбора строки JSON. а org.json.simple
содержит класс синтаксического анализа.
-
org.json.JSONObject
содержит множество методов getter, которые можно получить непосредственно как int, boolean, object, string, JSON Array и т.д. org.json.simple.JSONObject
не содержит определенных методов, поэтому вам нужно вводить приведение каждый раз при получении значение определенного ключа.
-
В простых словах используйте org.json.simple.JSONObject
только для синтаксического анализа и введите команду cast в org.json.JSONObject
для дальнейшего использования внутри программы.