Что такое JSON?
JSON (JavaScript Object Notation) — простой формат обмена данными, основанный на подмножестве языка программирования JavaScript.
В чем отличия Java и JavaScript?
Это 2 разных языка программирования, несмотря на схожесть их названий. Оба они имеют С-подобный синтаксис. Отличия следующие:
- Java реализует ООП подход, основанный на классах, JavaScript — на прототипах;
- Java имеет статическую типизацию, JavaScript — динамическую типизацию;
- Java загружается из скомпилированного байт-кода; JavaScript интерпретируется напрямую из файла.
В чем отличия JSON и XML?
JSON — формат обмена данными.
XML — язык разметки (в котором можно задать синтаксис, структуру, типы данных и вообще их модель).
Оба они могут быть использованы для передачи данных. Естественно, для работы с обоими стандартами используются различные фреймворки, отличается синтаксис.
Какие фреймворки для работы с JSON вы знаете?
33 Уровень познакомил нас с фрейворком jackson. В дополнение я приведу еще 3, и ссылку на статью, в которой они сравниваются:
- Jackson от FasterXML
- JSON.simple от Yidong Fang
- GSON от Google
- JSONP от Oracle
Сравниваем Java-библиотеки для работы с JSON: JSON.simple, GSON, Jackson и JSONP
Какие фреймворки для работы с XML вы знаете?
Поскольку XML является форматом представления данных, технологии для работы с ним разнообразнее. Я приведу технологии, используемые для сериализации Java объектов в XML:
- JAXB (входит в J в JDK)
- Xstream
Ссылка с кратким обзором различных фреймворков для работы с xml: JAVA + XML
Какие аннотации Jackson вы знаете?
Разберем те, которые использовались в лекциях:
- @JsonAutoDetect — ставится перед классом. Сообщает Jackson, что необходимо использовать поля этого класса при записи или чтении. В скобках можно задать параметр (fieldVisibility = JsonAutoDetect.Visibility.ANY ), для настройки видимости полей, которые будут использоваться (по умолчанию используются только public поля).
- @JsonIgnore — ставится перед полем. Сообщает Jackson, что данное поле нужно игнорировать при чтении/записи.
- @JsonProperty — Ставится перед полем, getter’ом или setter’ом. Позволяет задать другое имя поля при сериализации.
- @JsonWriteNullProperties — Ставится перед классом. Поля объекта, которые равны null не будет игнорироваться.
- @JsonPropertyOrder — Ставится перед классом. позволяет определить порядок, в котором поля java объекта будут сериализованы в JSON.
- @JsonDeserialize — Ставится перед полем. Позволяет определить класс, в который десериализуется JSON объект. Например из java массивы и списки сериализуются в массивы, и при десериализации можно выбрать, что именно мы хотим получить.
Вот ссылка на сайт с некоторыми аннотациями: Jackson Annotations
Какие аннотации JAXB вы знаете?
Так же разберу только те, которые использовались в лекции:
- @XmlRootElement — Ставится перед классом. Указывает на то, что этот объект может быть, элементом самого верхнего уровня, т.е. все остальные элементы лежат в нем.
- @XmlType — Ставится перед классом. Добавляет в XML-схему дополнительную информацию. Можно указать некоторые атрибуты, например порядок элементов имя и тд.
- @XmlElement — Ставится перед полем. Позволяет задать имя xml-элемента, значение по умолчанию и т.д.
- @XmlElementWrapper — Ставится перед полем, либо геттером. Позволяет создать обрамляющий тэг для группы элементов.
- @XmlJavaTypeAdapter — Ставится перед классом. В скобках указывается вспомогательный класс-адаптер, необходимый для маршилизации/демаршализации данного класса.
- @XmlEnum — Ставится перед enum. В скобках можно указать тип, в котором будут представлены значения enum.
- @XmlEnumValue — Ставится перед значением enum. Позволяет задать специальное значение для данного значения enum.
@XmlAttribute — Ставится перед полем. Поле будет представлено как XML-атрибут. Вот ссылка на сайт с некоторыми аннотациями (извиняюсь, что не сумел составить корректный перевод для аннотаций, информация воспринимается для понимания, но совершенно не представляю, как это грамотно сказать на русском): https://jaxb.java.net/tutorial/index.html
В чем отличие сериализации и десериализации в JSON?
Не понял суть вопроса. Сравнивать 2 взаимообратных процесса смысла не вижу. Возможно имелось ввиду сравнение JSON и XML, на эту тему в следующем вопросе приведена ссылка.
Что лучше JSON или XML? Почему?
Вот отличная статья, в которой сравнивается JSON и XML: JSON и XML. Что лучше?
Пожалуй, нельзя говорить, что что-то лучше. При выборе стоит смотреть на саму задачу и то, что будет эффективнее в использовании. Плюс, выбор может зависеть от личных предпочтений разработчика.
Что такое DTO?
DTO (Data Transfer Object) — паттерн проектирования содержащий данные без какой-либо логики для работы с ними. DTO обычно используются для передачи данных между различными приложениями, либо между слоями внутри одного приложения. Их можно рассматривать как хранилище информации, единственная цель которого — передать эту информацию получателю.
исправлены вопросы №2, №3, согласно замечанию
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
1. Если указан интерфейс, при десереализации требуется указать конкретную реализацию
2. Иерархия классов: если при сериализации в целом ничего критичного может не произойти, десериализация же может пройти не успешно, поэтому требуется указание дополнительного идентификатора и сопоставление типу конкретного класса, который будет использован при сериализации (в JSON появится доп. поле). На него же будет ориентироваться десериализация.
3) XML — язык разметки (в котором можно задать синтаксис, структуру, типы данных и вообще их модель — это можно подробнее узнать посмотрев инфу про XSD и его менее популярного брата DTD). Некоторые такие модели XML стандартизованы (например MathML для описания мат формул с соблюдением семантики). JSON — формат обмена данными, к нему также есть дополнительные средства валидации (например JSON Schema — но они пока не используются достаточно широко). Вопросы по типу 8 и 9 — они скорее всего для того, чтобы понять наличии практики работы с ними будущего кандидата на трудоустройство.