详解XML,Object,Json转换与Xstream的使用

yizhihongxing

详解XML,Object,Json转换与Xstream的使用

XML与对象的相互转换

XML与对象之间的转换是应用中常见的操作之一。Java开发中最常用的方式是使用Java自带的JAXB库或第三方库Xstream来实现。

使用JAXB实现XML与对象的转换

JAXB是Java API for XML Binding(Java API的XML绑定)的简称,它可以将Java对象与XML相互转换。JAXB规范的实现一般由JDK自带,使用JAXB需要在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0.1</version>
</dependency>

以下是示例代码:

将Java对象转换成XML格式
@XmlRootElement
public class Student {

    @XmlElement
    private String name;

    @XmlElement
    private int age;

    @XmlElement
    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlUtil {

    public static String toXml(Object obj) throws JAXBException {
        JAXBContext ctx = JAXBContext.newInstance(obj.getClass());
        Marshaller marshaller = ctx.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter sw = new StringWriter();
        marshaller.marshal(obj, sw);
        return sw.toString();
    }

}
public class Main {

    public static void main(String[] args) throws JAXBException {
        List<String> courses = new ArrayList<>();
        courses.add("Math");
        courses.add("English");
        Student student = new Student();
        student.setName("Tom");
        student.setAge(20);
        student.setCourses(courses);

        String xml = XmlUtil.toXml(student); 
        System.out.println(xml);
    }

}

输出结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<student>
    <name>Tom</name>
    <age>20</age>
    <courses>Math</courses>
    <courses>English</courses>
</student>
将XML格式转换成Java对象
@XmlRootElement
public class Student {

    @XmlElement
    private String name;

    @XmlElement
    private int age;

    @XmlElementWrapper(name="courses")
    @XmlElement(name="course")
    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlUtil {

    @SuppressWarnings("unchecked")
    public static <T> T fromXml(String xml, Class<T> clazz) throws JAXBException {
        JAXBContext ctx = JAXBContext.newInstance(clazz);
        Unmarshaller unmarshaller = ctx.createUnmarshaller();
        StringReader sr = new StringReader(xml);
        return (T)unmarshaller.unmarshal(sr);
    }

}
public class Main {

    public static void main(String[] args) throws JAXBException {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                     "<student>\n" +
                     "    <name>Tom</name>\n" +
                     "    <age>20</age>\n" +
                     "    <courses>\n" +
                     "        <course>Math</course>\n" +
                     "        <course>English</course>\n" +
                     "    </courses>\n" +
                     "</student>";

        Student student = XmlUtil.fromXml(xml, Student.class);
        System.out.println(student.getName());
        System.out.println(student.getAge());
        System.out.println(student.getCourses());
    }

}

输出结果:

Tom
20
[Math, English]

使用Xstream实现XML与对象的转换

Xstream是一个Java API,它可以将Java对象与XML相互转换,使用Xstream需要在pom.xml文件中添加依赖:

<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.15</version>
</dependency>

以下是示例代码:

将Java对象转换成XML格式
public class Student {

    private String name;

    private int age;

    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlUtil {

    public static String toXml(Object obj) {
        XStream xstream = new XStream();
        xstream.autodetectAnnotations(true);
        return xstream.toXML(obj);
    }

}
public class Main {

    public static void main(String[] args) {
        List<String> courses = new ArrayList<>();
        courses.add("Math");
        courses.add("English");
        Student student = new Student();
        student.setName("Tom");
        student.setAge(20);
        student.setCourses(courses);

        String xml = XmlUtil.toXml(student);
        System.out.println(xml);
    }

}

输出结果:

<com.example.demo.Student>
  <name>Tom</name>
  <age>20</age>
  <courses>
    <string>Math</string>
    <string>English</string>
  </courses>
</com.example.demo.Student>
将XML格式转换成Java对象
public class Student {

    private String name;

    private int age;

    @XStreamImplicit
    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlUtil {

    @SuppressWarnings("unchecked")
    public static <T> T fromXml(String xml, Class<T> clazz) {
        XStream xstream = new XStream();
        xstream.autodetectAnnotations(true);
        xstream.alias(clazz.getSimpleName(), clazz);
        return (T)xstream.fromXML(xml);
    }

}
public class Main {

    public static void main(String[] args) {
        String xml = "<com.example.demo.Student>\n" +
                     "  <name>Tom</name>\n" +
                     "  <age>20</age>\n" +
                     "  <courses>\n" +
                     "    <string>Math</string>\n" +
                     "    <string>English</string>\n" +
                     "  </courses>\n" +
                     "</com.example.demo.Student>";

        Student student = XmlUtil.fromXml(xml, Student.class);
        System.out.println(student.getName());
        System.out.println(student.getAge());
        System.out.println(student.getCourses());
    }

}

输出结果:

Tom
20
[Math, English]

Java对象与JSON格式相互转换

Java对象与JSON之间的转换也是应用程序中经常要做的操作。Java开发中最常用的方式是使用JSON-lib库来实现。

使用JSON-lib实现Java对象转换成JSON格式

JSON-lib是一个Java的JSON工具包,它可以将Java对象转换成JSON格式数据。在pom.xml文件中添加依赖:

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

以下是示例代码:

public class Student {

    private String name;

    private int age;

    private List<String> courses;

    // 省略getter和setter方法

}
public class JsonUtil {

    public static String toJson(Object obj) {
        JSONObject jsonObject = JSONObject.fromObject(obj);
        return jsonObject.toString();
    }

}
public class Main {

    public static void main(String[] args) {
        List<String> courses = new ArrayList<>();
        courses.add("Math");
        courses.add("English");
        Student student = new Student();
        student.setName("Tom");
        student.setAge(20);
        student.setCourses(courses);

        String json = JsonUtil.toJson(student);
        System.out.println(json);
    }

}

输出结果:

{
    "courses": [
        "Math",
        "English"
    ],
    "age": 20,
    "name": "Tom"
}

使用JSON-lib实现JSON格式转换成Java对象

以下是示例代码:

public class Student {

    private String name;

    private int age;

    @SuppressWarnings("unchecked")
    private List<String> courses;

    // 省略getter和setter方法

}
public class JsonUtil {

    @SuppressWarnings("unchecked")
    public static <T> T fromJson(String json, Class<T> clazz) {
        JSONObject jsonObject = JSONObject.fromObject(json);
        return (T)JSONObject.toBean(jsonObject, clazz);
    }

}
public class Main {

    public static void main(String[] args) {
        String json = "{\n" +
                      "    \"courses\": [\n" +
                      "        \"Math\",\n" +
                      "        \"English\"\n" +
                      "    ],\n" +
                      "    \"age\": 20,\n" +
                      "    \"name\": \"Tom\"\n" +
                      "}";

        Student student = JsonUtil.fromJson(json, Student.class);
        System.out.println(student.getName());
        System.out.println(student.getAge());
        System.out.println(student.getCourses());
    }

}

输出结果:

Tom
20
[Math, English]

XML与JSON之间的转换

XML与JSON之间的转换也是应用程序中常见的操作之一。使用Xstream可以简单地实现XML转JSON和JSON转XML的操作。

以下是示例代码:

XML转JSON
public class Student {

    @XStreamAlias("Name")
    private String name;

    @XStreamAlias("Age")
    private int age;

    @XStreamImplicit(itemFieldName="Course")
    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlJsonUtil {

    public static String xml2Json(String xml) {
        XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
        xstream.registerConverter(new DateConverter("yyyy-MM-dd", new String[0]));
        xstream.processAnnotations(Student.class);
        Student student = (Student)xstream.fromXML(xml);
        return JSON.toJSONString(student);
    }

}
public class Main {

    public static void main(String[] args) {
        String xml = "<Student>\n" +
                     "  <Name>Tom</Name>\n" +
                     "  <Age>20</Age>\n" +
                     "  <Course>Math</Course>\n" +
                     "  <Course>English</Course>\n" +
                     "</Student>";

        String json = XmlJsonUtil.xml2Json(xml);
        System.out.println(json);
    }

}

输出结果:

{"Age":20,"Course":["Math","English"],"Name":"Tom"}
JSON转XML
public class Student {

    private String name;

    private int age;

    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlJsonUtil {

    public static String json2Xml(String json) {
        Student student = JSON.parseObject(json, Student.class);
        XStream xstream = new XStream();
        xstream.autodetectAnnotations(true);
        return xstream.toXML(student);
    }

}
public class Main {

    public static void main(String[] args) {
        String json = "{\"name\":\"Tom\",\"age\":20,\"courses\":[\"Math\",\"English\"]}";

        String xml = XmlJsonUtil.json2Xml(json);
        System.out.println(xml);
    }

}

输出结果:

<Student>
  <name>Tom</name>
  <age>20</age>
  <courses>
    <string>Math</string>
    <string>English</string>
  </courses>
</Student>

Xstream的使用

在以上示例中,我们使用了Xstream来实现XML和JSON与Java对象之间的转换。Xstream可以自动将Java对象转换成相应的XML或JSON格式数据,也可以将XML或JSON格式数据转换成Java对象。

以下是示例代码:

将Java对象转换成XML或JSON格式
public class Student {

    private String name;

    private int age;

    private List<String> courses;

    // 省略getter和setter方法

}
public class XmlJsonUtil {

    public static String toXml(Object obj) {
        XStream xstream = new XStream();
        xstream.autodetectAnnotations(true);
        return xstream.toXML(obj);
    }

    public static String toJson(Object obj) {
        XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
        xstream.useAttributeFor(String.class);
        xstream.autodetectAnnotations(true);
        return xstream.toXML(obj);
    }

}
public class Main {

    public static void main(String[] args) {
        List<String> courses = new ArrayList<>();
        courses.add("Math");
        courses.add("English");
        Student student = new Student();
        student.setName("Tom");
        student.setAge(20);
        student.setCourses(courses);

        String xml = XmlJsonUtil.toXml(student);
        String json = XmlJsonUtil.toJson(student);
        System.out.println(xml);
        System.out.println(json);
    }

}

输出结果:

<Student>
  <name>Tom</name>
  <age>20</age>
  <courses>
    <string>Math</string>
    <string>English</string>
  </courses>
</Student>
{"student":{"name":"Tom","age":20,"courses":{"string":["Math","English"]}}}
将XML或JSON格式转换成Java对象
public class XmlJsonUtil {

    public static <T> T fromXml(String xml, Class<T> clazz) {
        XStream xstream = new XStream();
        xstream.autodetectAnnotations(true);
        xstream.alias(clazz.getSimpleName(), clazz);
        return (T)xstream.fromXML(xml);
    }

    public static <T> T fromJson(String json, Class<T> clazz) {
        XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
        xstream.useAttributeFor(String.class);
        xstream.autodetectAnnotations(true);
        xstream.alias(clazz.getSimpleName(), clazz);
        return (T)xstream.fromXML(json);
    }

}
public class Main {

    public static void main(String[] args) {
        String xml = "<Student>\n" +
                     "  <name>Tom</name>\n" +
                     "  <age>20</age>\n" +
                     "  <courses>\n" +
                     "    <string>Math</string>\n" +
                     "    <string>English</string>\n" +
                     "  </courses>\n" +
                     "</Student>";

        String json = "{\"student\":{\"name\":\"Tom\",\"age\":20,\"courses\":{\"string\":[\"Math\",\"English\"]}}}";

        Student student1 = XmlJsonUtil.fromXml(xml, Student.class);
        Student student2 = XmlJsonUtil.fromJson(json, Student.class);
        System.out.println(student1.getName());
        System.out.println(student1.getAge());
        System.out.println(student1.getCourses());
        System.out.println(student2.getName());
        System.out.println(student2.getAge());
        System.out.println(student2.getCourses());
    }

}

输出结果:

Tom
20
[Math, English]
Tom
20
[Math, English]

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解XML,Object,Json转换与Xstream的使用 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java 日期各种格式之间的相互转换实例代码

    下面是 “Java 日期各种格式之间的相互转换实例代码” 的完整攻略: 基本介绍 在Java中,可以使用java.text.SimpleDateFormat类来格式化日期,具体的格式定义可以参考Java官方文档中的SimpleDateFormat类说明(notes)。在这个过程中,需要注意日期格式的大小写,具体规则请参考文档说明。 日期转换 以下是实现日期转…

    Java 2023年5月20日
    00
  • Kafka多节点分布式集群搭建实现过程详解

    接下来我将详细讲解 “Kafka多节点分布式集群搭建实现过程详解” 的完整攻略。 1. 什么是Kafka Kafka 是一种高吞吐量的分布式发布订阅消息系统,应用于大规模的消息处理环境中,具有高可用、高性能的特点。 2. Kafka 集群搭建 2.1 环境准备 在搭建Kafka集群之前,需要准备好以下环境: Oracle JDK 1.8或以上版本 Zooke…

    Java 2023年5月20日
    00
  • vue集成百度UEditor富文本编辑器使用教程

    Vue集成百度UEditor富文本编辑器使用教程 在Vue项目中,我们通常需要使用富文本编辑器来帮助用户进行文本输入。本文将详细介绍如何在Vue中集成百度UEditor富文本编辑器,并且提供两个示例说明来帮助读者更好地理解。 第一步:安装百度UEditor 我们可以通过npm命令来安装百度UEditor。在终端中进入Vue项目的根目录,执行以下命令即可: n…

    Java 2023年6月15日
    00
  • IntellJ IDEA神器使用技巧(小结)

    IntellJ IDEA神器使用技巧小结 前言 IntelliJ IDEA是目前最流行的Java集成开发环境之一,拥有便捷的界面、丰富的插件和强大的功能,可以帮助开发人员提高开发效率。本文将介绍一些IntelliJ IDEA的使用技巧。 技巧一:快捷键 IntelliJ IDEA提供了许多快捷键,可以帮助开发人员更快速地执行常用的操作。以下是一些常用的快捷键…

    Java 2023年5月26日
    00
  • 一文带你吃透JSP增删改查实战案例详细解读

    一文带你吃透JSP增删改查实战案例详细解读 概述 本文将介绍JSP的增删改查实战案例,包含如下内容: 数据库的创建与数据表的设计 JSP页面的开发 Servlet的编写 实现增删改查功能 数据库的创建与数据表的设计 在本案例中,我们将以MySQL数据库为例进行数据库的创建和数据表的设计,具体步骤如下: 创建数据库 打开MySQL客户端,输入以下命令创建一个名…

    Java 2023年6月15日
    00
  • Spring依赖注入的几种方式分享梳理总结

    Spring依赖注入的几种方式分享梳理总结 什么是依赖注入(Dependency Injection,DI) 简单来说,依赖注入就是将对象所依赖的其他对象注入到其内部。这样可以达到解耦的效果,提高代码的可维护性。 通常,依赖注入需要依赖容器完成,目前比较常用的容器有Spring、Guice等。 Spring依赖注入的几种方式 1.构造注入(Construct…

    Java 2023年5月19日
    00
  • Spring MVC实现文件上传和下载

    对于Spring MVC实现文件上传和下载的完整攻略,包含以下几个步骤: 步骤一:添加依赖 从Maven仓库中获取所需的依赖,这里只列出需要的主要依赖: <!– 文件上传 –> <dependency> <groupId>commons-fileupload</groupId> <artifactId…

    Java 2023年6月15日
    00
  • Java获取服务器IP及端口的方法实例分析

    Java获取服务器IP及端口的方法实例分析 在Java中获取服务器的IP地址和端口号是很常见的需求。本文将介绍几种Java获取服务器IP及端口的方法实例,通过这些方法可以轻松实现对服务器IP地址和端口的获取。 方法一:使用InetAddress类 我们可以使用Java标准库中的InetAddress类来获取服务器的IP地址和端口号。 import java.…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部