Урок 42: JSON и XML
JSON (JavaScript Object Notation) и XML (eXtensible Markup Language) — это два широко используемых формата данных для обмена информацией между клиентами и серверами. JSON известен своей легкостью и читаемостью, а XML предоставляет гибкость и структурированность. В этом уроке мы рассмотрим основы работы с JSON и XML в Java, используя библиотеки Jackson и JAXB соответственно.
Работа с JSON
Для работы с JSON в Java часто используется библиотека Jackson. Пример сериализации и десериализации объекта в JSON:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Создание объекта User
User user = new User(1, "John Doe");
// Сериализация объекта в JSON
String jsonString = objectMapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + jsonString);
// Десериализация JSON в объект
User deserializedUser = objectMapper.readValue(jsonString, User.class);
System.out.println("Deserialized User: " + deserializedUser);
}
}
class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
// Getters and setters omitted for brevity
}
Результат выполнения
Serialized JSON: {"id":1,"name":"John Doe"}
Deserialized User: User{id=1, name='John Doe'}
Работа с XML
Для работы с XML в Java можно использовать библиотеку JAXB (Java Architecture for XML Binding). Пример сериализации и десериализации объекта в XML:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
public class XmlExample {
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(User.class);
// Создание объекта User
User user = new User(1, "Jane Doe");
// Сериализация объекта в XML
Marshaller marshaller = context.createMarshaller();
StringWriter writer = new StringWriter();
marshaller.marshal(user, writer);
String xmlString = writer.toString();
System.out.println("Serialized XML: " + xmlString);
// Десериализация XML в объект
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader reader = new StringReader(xmlString);
User deserializedUser = (User) unmarshaller.unmarshal(reader);
System.out.println("Deserialized User: " + deserializedUser);
}
}
@XmlRootElement
class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
// Getters and setters omitted for brevity
}
Результат выполнения
Serialized XML: <user><id>1</id><name>Jane Doe</name></user>
Deserialized User: User{id=1, name='Jane Doe'}
Упражнения
Упражнение 1: Сериализация и десериализация JSON
Создайте класс Product
с полями id
, name
и price
. Напишите программу для сериализации объекта Product
в JSON и десериализации JSON в объект.
Решение:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonProductExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Создание объекта Product
Product product = new Product(1, "Laptop", 799.99);
// Сериализация объекта в JSON
String jsonString = objectMapper.writeValueAsString(product);
System.out.println("Serialized JSON: " + jsonString);
// Десериализация JSON в объект
Product deserializedProduct = objectMapper.readValue(jsonString, Product.class);
System.out.println("Deserialized Product: " + deserializedProduct);
}
}
class Product {
private int id;
private String name;
private double price;
public Product(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
// Getters and setters omitted for brevity
}
Объяснение: Программа создает объект Product
, сериализует его в JSON и затем десериализует JSON обратно в объект Product
.
Упражнение 2: Сериализация и десериализация XML
Создайте класс Order
с полями orderId
и productName
. Напишите программу для сериализации объекта Order
в XML и десериализации XML в объект.
Решение:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
public class XmlOrderExample {
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Order.class);
// Создание объекта Order
Order order = new Order(1, "Smartphone");
// Сериализация объекта в XML
Marshaller marshaller = context.createMarshaller();
StringWriter writer = new StringWriter();
marshaller.marshal(order, writer);
String xmlString = writer.toString();
System.out.println("Serialized XML: " + xmlString);
// Десериализация XML в объект
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader reader = new StringReader(xmlString);
Order deserializedOrder = (Order) unmarshaller.unmarshal(reader);
System.out.println("Deserialized Order: " + deserializedOrder);
}
}
@XmlRootElement
class Order {
private int orderId;
private String productName;
public Order() {
}
public Order(int orderId, String productName) {
this.orderId = orderId;
this.productName = productName;
}
// Getters and setters omitted for brevity
}
Объяснение: Программа создает объект Order
, сериализует его в XML и затем десериализует XML обратно в объект Order
.