Преобразование JSON в XML Java с использованием Gson и JAXB с примером
Что такое JSON?
JSON — это аббревиатура от Javascript Object Notation, которая представляет собой форму данных, которая следует определенному правилу, которое в настоящее время доступно для чтения большинства языков программирования. Мы можем легко сохранить его в файл или записать в базу данных. Формат JSON использует пары ключ-значение для описания данных.
В следующем примере мы определяем строку JSON, в которой хранится личная информация:
{
"username" : "guru99user",
"email" : "guru99user@mail.com"
}
Итак, синтаксис JSON очень прост. Каждая информация о данных будет состоять из двух частей:ключа и значения, которые соответствуют имени поля и его значению в определенной записи. Но при дальнейшем рассмотрении есть несколько вещей, подобных этому:
- Строка JSON заключена в фигурные скобки {}.
- Ключи и значения JSON должны быть заключены в кавычки {“}.
- Если данных больше (больше пар ключ => значение), для разделения используются запятые (,).
- Ключи JSON должны состоять из букв или цифр без знака, _ и без пробелов, первый символ не должен быть цифрой.
В этом уроке вы узнаете-
- Что такое JSON?
- Что такое XML?
- Что такое Гсон?
- Что такое JAXB?
- Как преобразовать XML в JSON?
- Преобразование сообщения XML в объекты Java с помощью JAXB
- Преобразование объектов Java в сообщение JSON с помощью Gson
- Преобразование сообщения JSON в объекты Java с помощью Gson
- Преобразование объектов Java в сообщение XML с помощью JAXB
Что такое XML?
XML означает расширяемый язык разметки, также называемый расширяемым языком разметки, предложенным Консорциумом World Wide Web (https://www.w3.org/) для создания других языков разметки. Это простое подмножество, которое может описывать множество различных типов данных, поэтому оно очень полезно при обмене данными между системами.
Теги в XML часто не определены заранее, а создаются в соответствии с пользовательскими соглашениями. В XML представлены новые функции, основанные на преимуществах HTML.
Есть еще несколько полезных функций для создания XML в различных системах и решениях:
- XML расширяем:XML позволяет создавать собственные пользовательские теги в соответствии с вашим приложением.
- XML переносит данные, а не отображает их:XML позволяет хранить данные независимо от того, как они будут отображаться.
- XML — это общепринятый стандарт:XML был разработан консорциумом World Wide Web Consortium (W3C) и доступен как открытый стандарт.
XML построен на основе структуры вложенных узлов. Каждый узел будет иметь открывающий тег и закрывающий тег следующим образом:
<node>content</node>
Где:
- <узел> является открытым тегом, имя этого тега определяется вами.
- узел> является закрытым тегом, имя этого тега должно совпадать с именем открытого тега.
- контент является содержимым этого тега.
В начале каждого XML-файла вы должны объявить тег, чтобы указать, какая версия XML используется. Синтаксис тега инструкции:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Что такое Гсон?
Gson (https://github.com/google/gson) — это библиотека Java, которая позволяет пользователям преобразовывать объект Java в строку JSON, а также преобразовывать строку JSON в объект Java. Gson может работать с произвольными объектами Java, включая существующие объекты, без исходного кода.
Начиная с версии 1.6, Gson представляет два новых класса — JsonReader. и JsonWriter для обеспечения потоковой обработки данных JSON.
- JsonWriter – Потоковая запись в JSON. Синтаксис для общей реализации следующий. Мы создаем JsonWriter объект. Чтобы начать и закончить создание строки JSON, мы используем функцию beginObject(). и endObject() . В середине выполнения этих двух функций мы выполняем запись данных парами (ключ => значение).
JsonWriter writer = new JsonWriter();
writer.beginObject();
writer.name("key").value("value");
writer.endObject();
- JsonReader – Потоковое чтение из JSON. Синтаксис для общей реализации следующий. Мы создаем объект JsonReader. Чтобы начать и закончить создание строки JSON, мы используем функции beginObject() и endObject(). В середине выполнения этих двух функций мы выполняем чтение данных с помощью пар (ключ => значение).
JsonReader reader = new JsonReader();
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("key")) {
String value = reader.nextString();
}
}
reader.endObject();
Потоковая обработка Gson выполняется быстро. Однако вам необходимо обрабатывать каждую пару (ключ => значение) обработки данных JSON.
Что такое JAXB?
JAXB расшифровывается как Архитектура Java для привязки XML, которая представляет собой библиотеку, использующую аннотации для преобразования объектов Java в содержимое XML и наоборот. Поскольку JAXB определяется спецификацией, мы можем использовать различные реализации этого стандарта.
В JAXB мы часто используем следующие основные аннотации, а именно:
- @XmlRootElement :эта аннотация указывает, какой самый внешний тег XML-файла, и поэтому он объявлен поверх класса.
- @XmlElementWrapper :эта аннотация создает XML-элемент-оболочку вокруг коллекций.
- @XmlElement :эта аннотация, используемая для объявления атрибута объекта, является тегом XML-файла.
- @XmlAttribute :эта аннотация также используется для объявления атрибута объекта как тега XML-файла.
Синтаксис для общей реализации следующий. Во-первых, мы инициализируем JAXBContext. объект с помощью MyObject объект для преобразования.
JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class);
В этом JAXBContext объект, у него есть метод для создания объекта, который преобразует содержимое XML в объект Java, Unmarshaller .
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
В этом JAXBContext объект, у него есть метод для создания объекта, который преобразует объект Java в содержимое XML, которое является Marshaller. .
Marshaller marshallerObj = jaxbContext.createMarshaller();
Как преобразовать XML в JSON?
Реализуем пример преобразования XML в JSON на платформе:
- Откройте JDK 8 для Ubuntu 18.04 x64.
- Eclipse IDE 2019-03 (4.11.0) x64 Java Development for Ubuntu.
- Гсон 2.8.5.
Шаг 1 . Создать проект.
Создать новый проект Java.
центр> рисунок> Шаг 2 . Задайте имя проекта.
Задайте имя проекта XmlToJsonExample. .
центр> рисунок> Шаг 3 . Создайте папку.
Создайте папку data/input. содержащий два файла sample.xml и sample.json .
центр> рисунок> Давайте сначала определим наш XML с помощью department. , роль и человек свойства.
Общая архитектура такова:<один отдел — много ролей>; <одна роль – много людей>.
центр> рисунок> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <root> <department> <roles> <role id="1"> <position>head</position> <salary>10k</salary> </role> <role id="2"> <position>manager</position> <salary>8k</salary> </role> <role id="3"> <position>employee</position> <salary>5k</salary> </role> </roles> <persons> <person id="1"> <name>Red</name> <role>1</role> </person> <person id="2"> <name>Green</name> <role>2</role> </person> <person id="3"> <name>Blue</name> <role>2</role> </person> <person id="4"> <name>Yellow</name> <role>3</role> </person> <person id="5"> <name>Brown</name> <role>3</role> </person> </persons> </department> </root>
Во-вторых, мы определяем JSON с той же идеей:
{
"roles": [
{
"id": "1",
"position": "head",
"salary": "10k",
"persons": [
{
"id": "1",
"name": "Red"
}
]
},
{
"id": "2",
"position": "manager",
"salary": "8k",
"persons": [
{
"id": "2",
"name": "Green"
},
{
"id": "3",
"name": "Blue"
}
]
},
{
"id": "3",
"position": "employee",
"salary": "5k",
"persons": [
{
"id": "4",
"name": "Yellow"
},
{
"id": "5",
"name": "Brown"
}
]
}
]
}
Шаг 4 . Определить объект.
Определить соответствующие классы объектов в пакете model. .
центр> рисунок> - Роль.java:
@XmlRootElement(name = "role")
public class Role {
private String id;
private String position;
private String salary;
public Role() {
super();
}
public Role(String id, String position, String salary) {
super();
this.id = id;
this.position = position;
this.salary = salary;
}
@XmlAttribute(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "position")
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@XmlElement(name = "salary")
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
}
- Person.java:
@XmlRootElement(name = "person")
public class Person {
private String id;
private String name;
private String role;
public Person() {
super();
}
public Person(String id, String name, String role) {
super();
this.id = id;
this.name = name;
this.role = role;
}
@XmlAttribute(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "role")
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
- Department.java:
@XmlRootElement(name = "department")
public class Department {
private List<Role> roles;
private List<Person> persons;
public Department() {
super();
}
public Department(List<Role> roles, List<Person> persons) {
super();
this.roles = roles;
this.persons = persons;
}
@XmlElementWrapper(name = "roles")
@XmlElement(name = "role")
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
@XmlElementWrapper(name = "persons")
@XmlElement(name = "person")
public List<Person> getPersons() {
return persons;
}
public void setPersons(List<Person> persons) {
this.persons = persons;
}
}
XMLModel.java:
@XmlRootElement(name = "root")
public class XMLModel {
private Department department;
public XMLModel() {
super();
}
public XMLModel(Department department) {
super();
this.department = department;
}
@XmlElement(name = "department")
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
Шаг 5 . Настройте библиотеку.
Добавьте и настройте библиотеку Gson 2.8.5 в путь сборки Java.
<сильный> сильный>
центр> рисунок> Преобразование сообщения XML в объекты Java с помощью JAXB
Во-первых, мы определяем производительность, классифицированную в пакете service. .
центр> рисунок> На первом этапе первого процесса мы используем метод Un-marshalling JAXB.
Un-marshalling предоставляет клиентскому приложению возможность преобразовывать данные XML в объекты Java, производные от JAXB.
Мы определяем функцию getObjectFromXmlFile чтобы отменить преобразование нашего XML-файла обратно в объект Java. Эта функция определена в классе XMLService. .
public XMLModel getObjectFromXmlFile(String filePath) {
try {
File file = new File(filePath);
JAXBContext jaxbContext = JAXBContext.newInstance(XMLModel.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
XMLModel root = (XMLModel) jaxbUnmarshaller.unmarshal(file);
return root;
} catch (JAXBException e) {
e.printStackTrace();
return null;
}
}
Мы вызываем приведенный выше код в классе XmlToJsonService. .
XMLService xmlService = new XMLService(); XMLModel xmlModel = xmlService.getObjectFromXmlFile(filePathIn); Department department = xmlModel.getDepartment(); List<Role> roles = department.getRoles(); List<Person> persons = department.getPersons();
Затем мы переходим к следующему шагу.
Преобразование объектов Java в сообщение JSON с помощью Gson
На этом этапе мы определяем функцию writeDataToJsonFile. для записи данных в файл JSON. Эта функция определена в классе JsonService. .
Обратите внимание, что для записи списка строк JSON мы используем функцию beginArray(). и endArray() . Между этими двумя функциями мы записываем каждую строку JSON.
public void writeDataToJsonFile(String filePath, List<Role> roles, List<Person> persons) {
try {
JsonWriter writer = new JsonWriter(new FileWriter(filePath));
writer.setIndent(" ");
writer.beginObject();
writer.name("roles");
writer.beginArray();
for (Role role : roles) {
writer.beginObject();
writer.name("id").value(role.getId());
writer.name("position").value(role.getPosition());
writer.name("salary").value(role.getSalary());
writer.name("persons");
writer.beginArray();
for (Person person : persons) {
if (person.getRole().equalsIgnoreCase(role.getId())) {
writer.beginObject();
writer.name("id").value(person.getId());
writer.name("name").value(person.getName());
writer.endObject();
}
}
writer.endArray();
writer.endObject();
}
writer.endArray();
writer.endObject();
writer.close();
} catch (IOException e) {
}
}
Мы вызываем приведенный выше код в классе XmlToJsonService. .
JsonService jsonService = new JsonService(); jsonService.writeDataToJsonFile(filePathOut, roles, persons);
Это первый процесс.
Преобразование сообщения JSON в объекты Java с помощью Gson
На первом этапе второго процесса мы определяем функцию getDataFromJsonFile. для чтения данных из файла JSON. Эта функция определена в классе JsonService. .
Обратите внимание, что для чтения списка строк JSON мы используем функцию beginArray(). и endArray() . Между этими двумя функциями мы читаем каждую строку JSON.
public void getDataFromJsonFile(String filePath, List<Role> roles, List<Person> persons) {
try {
JsonReader reader = new JsonReader(new FileReader(filePath));
reader.beginObject();
while (reader.hasNext()) {
String nameRoot = reader.nextName();
if (nameRoot.equals("roles")) {
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
Role role = new Role();
while (reader.hasNext()) {
String nameRole = reader.nextName();
if (nameRole.equals("id")) {
role.setId(reader.nextString());
} else if (nameRole.equals("position"))
{ role.setPosition(reader.nextString());
} else if (nameRole.equals("salary")) {
role.setSalary(reader.nextString());
} else if (nameRole.equals("persons")) {
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
Person person = new Person();
person.setRole(role.getId());
while (reader.hasNext()) {
String namePerson = reader.nextName();
if (namePerson.equals("id")) {
person.setId(reader.nextString());
} else if (namePerson.equals("name")) {
person.setName(reader.nextString());
}
}
persons.add(person);
reader.endObject();
}
reader.endArray();
}
}
roles.add(role);
reader.endObject();
}
reader.endArray();
}
}
reader.endObject();
reader.close();
} catch (IOException e) {
}
}
Мы вызываем приведенный выше код в классе XmlToJsonService. .
JsonService jsonService = new JsonService(); List<Role> roles = new ArrayList<>(); List<Person> persons = new ArrayList<>(); jsonService.getDataFromJsonFile(filePathIn, roles, persons);
Как конвертировать Json в XML Java?
JSON в XML в JAVA преобразуется с помощью JSONObject json =new JSONObject(str); Строка xml =XML . Если у вас есть действительный файл dtd или файл xml, очень легко преобразовать json в xml, а также xml в json.
Затем мы переходим к следующему шагу.
Преобразование объектов Java в сообщение XML с помощью JAXB
На этом этапе мы используем технику Marshalling JAXB.
Маршаллинг предоставляет клиентскому приложению возможность преобразовывать дерево объектов Java, полученное из JAXB, в данные XML.
Мы определяем функцию parseObjectToXm для преобразования объекта Java в сообщение XML. Эта функция определена в классе
XMLService.
public void parseObjectToXml(String filePath, XMLModel xmlModel) {
try {
JAXBContext contextObj = JAXBContext.newInstance(XMLModel.class);
Marshaller marshallerObj = contextObj.createMarshaller();
marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshallerObj.marshal(xmlModel, new FileOutputStream(filePath));
} catch (JAXBException je) {
System.out.println("JAXBException");
} catch (IOException ie) {
System.out.println("IOException");
}
}
Мы вызываем приведенный выше код в классе XmlToJsonService. .
XMLService xmlService = new XMLService(); XMLModel xmlModel = new XMLModel(); Department department = new Department(); department.setRoles(roles); department.setPersons(persons); xmlModel.setDepartment(department); xmlService.parseObjectToXml(filePathOut, xmlModel);
Это второй процесс.
Заключение
В этом руководстве мы кратко изучили один способ, которым JAXB может читать XML-данные, а Gson записывать их в JSON. Напротив, мы также видели, как Gson считывает данные JSON, а JAXB записывает их в XML.
java
- Класс C++ и объект с примером
- Java Hello World:как написать свою первую программу на Java с примером
- Метод String Length() в Java:как найти на примере
- Метод Java String charAt() с примером
- Строка Java содержит () Метод | Проверить подстроку с примером
- Метод Java String endWith() с примером
- Java BufferedReader:как читать файл в Java с примером
- Ряд Фибоначчи в Java с использованием программы рекурсии и циклов
- Алгоритм сортировки вставками в Java с примером программы
- Сортировка выбором в программе Java с примером