Какой из них использовать? 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, где самое лучшее (безопасное) место для загрузки этой библиотеки)?

Немного поздно, но я хотел поделиться своим мнением об этом.

Недавно я столкнулся с этой проблемой, когда нашел Java-проект с обеими библиотеками, и они были использованы одновременно.

Я думаю, что org.json легче читать и использовать по org.json основным причинам (для моих нужд):

  1. JsonObject неизменен. Вы не можете добавлять новые пары ключ / значение в уже существующий JsonObject (ссылка здесь: javax.json: Добавить новый JsonNumber в существующий JsonObject )

  2. Для корректной печати 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 . Еще один шаг, которого можно избежать.

Я уверен, что есть больше различий (не уверен, что можно создать JsonObject из String), но это мои мысли.

Я рекомендую использовать Json-простой инструментарий Google для работы с объектами JSON. Он предоставляет полезные функции и не зависит от внешних библиотек, которые оказались огромной проблемой при разработке приложений для Android.

Чтобы ответить на ваш вопрос: если вы не хотите использовать json-simple в проекте, вы должны использовать JSONObject от org.json, потому что он предоставляется Android JDK. Для получения дополнительной информации см. http://developer.android.com/reference/org/json/JSONObject.html .

  1. org.json не содержит класс синтаксического анализа для разбора строки JSON. В то время как org.json.simple содержит класс синтаксического анализа.

  2. org.json.JSONObject содержит множество методов getter, которые можно получить непосредственно как int, boolean, object, string, JSON Array и т. Д. org.json.simple.JSONObject не содержит конкретных методов, поэтому вам нужно набирать текст каждый раз при получении Значение определенного ключа.

  3. Простыми словами используйте org.json.simple.JSONObject для синтаксического анализа и введите его в org.json.JSONObject для дальнейшего использования внутри программы.