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

详解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日

相关文章

  • SpringMVC中ModelAndView的使用及说明

    SpringMVC中ModelAndView的使用及说明 在SpringMVC中,ModelAndView是一个非常重要的类,用于表示模型和视图的组合。本文将详细讲解SpringMVC中ModelAndView的使用及说明,包括如何创建ModelAndView对象、如何设置模型数据、如何设置视图名称、如何使用重定向和转发等。 创建ModelAndView对象…

    Java 2023年5月18日
    00
  • idea关联maven的使用详解

    idea关联maven的使用详解 在使用 IntelliJ IDEA 进行Web应用程序开发时,使用 Maven 管理工程是非常常见的方式。在使用 IntelliJ IDEA 进行 Maven 管理 Web 工程开发时,需要将 IntelliJ IDEA 与本地的 Maven 程序进行关联,这样才能使用 Maven 的所有功能进行 Web 应用程序开发。下面…

    Java 2023年5月20日
    00
  • Java SimpleDateFormat线程安全问题原理详解

    Java SimpleDateFormat线程安全问题原理详解 简介 SimpleDateFormat 是 Java 中处理日期格式化的常用类,常用来将 Date 类型转换成特定格式的字符串。然而,SimpleDateFormat 是非线程安全的,当多个线程同时访问同一个 SimpleDateFormat 实例时,就会出现线程安全问题。本文将通过分析 Sim…

    Java 2023年6月1日
    00
  • 解决java.lang.Error: Unresolved compilation problems:问题

    当我们在使用 Eclipse 进行 Java 开发时,可能会遇到 “Unresolved compilation problems:” 的错误,这是由于 Eclipse 环境无法正确编译代码造成的。以下是解决该问题的完整攻略: 1.清理项目以及重启 Eclipse 如果出现“Unresolved compilation problems” 的问题,可能是 E…

    Java 2023年5月25日
    00
  • spring-boot-starter-parent的作用详解

    “spring-boot-starter-parent”是一个Maven父项目,为Spring Boot应用程序的制作提供了标准化的模式和结构。它本身不提供任何功能,而是通过定义版本来简化Maven项目配置。 根据Spring Boot文档,使用“spring-boot-starter-parent”可以获得以下好处: 提供了默认的Maven设置,无需进行繁…

    Java 2023年5月20日
    00
  • Java关于MyBatis缓存详解

    Java关于MyBatis缓存详解 MyBatis是一种Java持久层框架,它提供了一个简单的方法来处理数据源之间的交互,并具有许多内置功能,包括缓存。这篇文章将深入探讨MyBatis缓存,讲解如何使用缓存来提高应用程序的性能。 MyBatis缓存概述 MyBatis缓存可以分为一级缓存和二级缓存。 一级缓存 MyBatis的默认缓存是一级缓存,它是SqlS…

    Java 2023年6月1日
    00
  • 详解Java关于时间格式化的方法

    关于Java中的时间格式化,一般使用SimpleDateFormat类实现。下面我将详细讲解如何使用SimpleDateFormat类对时间进行格式化,并且还会提供两个示例。 一、SimpleDateFormat类的基本用法 SimpleDateFormat类可以把日期时间格式化成需要的字符串形式。具体用法为先创建一个SimpleDateFormat对象,然…

    Java 2023年5月20日
    00
  • 使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法

    使用EasyUI实现查询条件的后端传递并自动刷新表格,一般有两种方法可以实现。 方法一:使用表单的submit事件以及datagrid的load方法 1. 在页面中定义查询表单以及datagrid 在页面中定义一个查询表单,表单中包含了查询条件,以及一个查询按钮。同时,定义一个datagrid用于表格的展示。 <form id="queryF…

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