Подтвердить что ты не робот

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

4b9b3361

Ответ 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 для дальнейшего использования внутри программы.