Convert XML sang JSON sử dụng Jackson 2
NỘI DUNG BÀI VIẾT
Jackson là một trong những JSON Parse phổ biến cho ứng dụng Java, với việc phát hành Jackson 2, họ đã thêm hỗ trợ XML Parsing. Trong bài này, chúng ta sẽ học cách convert từ XML sang JSON bằng cách sử dụng thư viện Jackson 2.
Trong các project Spring Boot, mặc định nó sẽ sử dụng Jackson với một ObjectMapper instance được cấu hình tự động để serialize các response trả về cho client và deserialize JSON từ client gửi lên.
Folder Structure:
- Tạo một Maven Project đơn giản “Jackson2XmlToJson” bằng cách chọn maven-archetype-quickstart và tạo một package com.hdd trong scr/main/java.
- Thêm các dependency vào POM.XML
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javainterviewpoint</groupId>
<artifactId>Jackson2XmlToJson</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Jackson2XmlToJson</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>
Code language: HTML, XML (xml)
- Tạo 2 class XmlToJson.java và XmlFileToJson.java
Convert XML sang JSON sử dụng Jackson 2
Để parse từ XML sang JSON, tôi sử dụng XML bên dưới:
<?xml version='1.0' encoding='UTF-8'?>
<student>
<age>26</age>
<id>96</id>
<name>hocspringboot.net</name>
</student>
Code language: HTML, XML (xml)
XmlToJson.java:
package com.hdd;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class XmlToJson
{
public static void main(String[] args)
{
String data = "<?xml version='1.0' encoding='UTF-8'?>"+
"<student>"+
"<age>11</age>"+
"<id>12</id>"+
"<name>hocspringboot.net</name>"+
"</student>";
try
{
// Create a new XmlMapper to read XML tags
XmlMapper xmlMapper = new XmlMapper();
//Reading the XML
JsonNode jsonNode = xmlMapper.readTree(data.getBytes());
//Create a new ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
//Get JSON as a string
String value = objectMapper.writeValueAsString(jsonNode);
System.out.println("*** Converting XML to JSON ***");
System.out.println(value);
} catch (JsonParseException e)
{
e.printStackTrace();
} catch (JsonMappingException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
Code language: JavaScript (javascript)
Trong đoạn code trên, tôi sẽ convert chuỗi XML đơn giản sang định dạng của JSON.
- Trong Jackson 2, chúng ta có một class XmlMapper để làm việc với XML, chỉ cần tạo một instance của class XmlMappervà gọi method readTree() trên đầu để lấy JsonNode.
XmlMapper xmlMapper = new XmlMapper();
JsonNode jsonNode = xmlMapper.readTree(data.getBytes());
Code language: JavaScript (javascript)
- Tạo một object ObjectMapper mới, nó giúp chúng tôi ánh xạ dữ liệu JSON.
ObjectMapper objectMapper = new ObjectMapper();
Code language: JavaScript (javascript)
- JsonNode có thể được chuyển đổi thành một chuỗi bằng cách sử dụng writeValueAsString() của ObjectMapper
String value = objectMapper.writeValueAsString(jsonNode);
System.out.println(value);
Code language: JavaScript (javascript)
Output:
*** Converting XML to JSON ***
{"age":"11","id":"12","name":"hocspringboot.net"}
Code language: JavaScript (javascript)
Convert XML file to JSON in Java
package com.hdd;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class XmlFileToJson
{
public static void main(String[] args)
{
String data = "";
try
{
// Read the student.xml
data = FileUtils.readFileToString(new File("d:\\jackson\\student.xml"), "UTF-8");
// Create a new XmlMapper to read XML tags
XmlMapper xmlMapper = new XmlMapper();
//Reading the XML
JsonNode jsonNode = xmlMapper.readTree(data.getBytes());
//Create a new ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
String value = objectMapper.writeValueAsString(jsonNode);
System.out.println("*** Converting XML to JSON ***");
System.out.println(value);
} catch (JsonParseException e)
{
e.printStackTrace();
} catch (JsonMappingException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
Code language: JavaScript (javascript)
- Để đọc file XML, tôi sẽ sử dụng method FIleUtils.readFileToString() [commons.io jar].
data = FileUtils.readFileToString(new File("d:\\jackson\\student.xml"), "UTF-8");
Code language: JavaScript (javascript)
- Tạo một instance của lớp XmlMapper và gọi method readTree() trên lớp đó để lấy JsonNode.
ObjectMapper objectMapper = new ObjectMapper();
Code language: JavaScript (javascript)
- JsonNode có thể được chuyển đổi thành một chuỗi bằng cách sử dụng writeValueAsString() của ObjectMapper.
String value = objectMapper.writeValueAsString(jsonNode);
System.out.println(value);
Code language: JavaScript (javascript)
Output:
*** Converting XML to JSON ***
{"age":"26","id":"96","name":"hocspringboot.net"}
Code language: JavaScript (javascript)
Chúc bạn thành công :D.
Source code: Github
Các bài viết liên quan:
Leave a Reply