Jackson使用示例-Bean、XML、Json之间相互转换

 更新时间:2024年05月18日 09:36:34   作者:秋一叶叶  
Jackson是一个强大工具,可用于Json、XML、实体之间的相互转换,JacksonXmlElementWrapper用于指定List等集合类,外围标签名,JacksonXmlProperty指定包装标签名,或者指定标签内部属性名,JacksonXmlRootElement指定生成xml根标签的名字,JacksonXmlText指定当前这个值

前言

目前常见的json解析工具有jackson、fastjson、gson。

  • jackson是Spring mvc内置的json转换工具;
  • fastjson是阿里的开源JSON解析库,由于fastjson经常会出现漏洞,暂不考虑;
  • Jackson是一个强大工具,可用于Json、XML、实体之间的相互转换。

Jackson相关注解

注解

说明

@JsonProperties

把属性的名称序列化时转换为另外一个名称 ;@JsonProperty(“DepName”)

@JsonFormat

把属性的格式序列化时转换成指定的格式;@JsonFormat(pattern = “yyyy-MM-dd”)

@JsonPropertyOrder

指定属性在序列化时 json 中的顺序;@JsonPropertyOrder({ “age”, “name” })

@JsonIgnore

排除指定属性不被json序列化

@JacksonXmlProperty

指定XML命名空间的名称;@JacksonXmlProperty(localName = “DepName”)

@JacksonXmlRootElement

指定XML根元素命名空间的名称;@JacksonXmlRootElement(localName = “RootName”)

@JacksonXmlElementWrapper

可用于指定List等集合类,外围标签名;@JacksonXmlElementWrapper(localName = “EmpMessage”)

1、对象和json互转

引入jackson相关依赖:

<!--注解包,提供标准注解功能-->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
</dependency>
<!--核心包,提供基于"流模式"解析的相关 API-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
</dependency>
<!--数据绑定包,提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
<!--日期类型序列化包-->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<!--引入xml功能-->
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

Employees实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employees {
    private String name;
    private Integer age;
    private String sex;
}

测试代码:

/**
 * @author 秋一叶
 * @create 2024-04-23 21:00
 * json字符串和对象、集合、map互转
 *
 */
public class Demo2 {
    public static void main(String[] args) {
   		ObjectMapper objectMapper = new ObjectMapper();
        Employees employees1 = new Employees("秋一叶",18,"男");
        Employees employees2 = new Employees("小王",20,"男");
        
        try {
            //对象转json字符串
            String jsonString = objectMapper.writeValueAsString(employees1);
            //json字符串转为对象
            Employees emp1 = objectMapper.readValue(jsonString, Employees.class);
            System.out.println("json字符串:" + jsonString);
            System.out.println("对象1:" + emp1);

            System.out.println("====================================================");

            //对象转为json字符串写入文件
            objectMapper.writeValue(new File("emp.json"), employees1);
            //从文件中读取json字符串转为对象
            Employees emp2 = objectMapper.readValue(new File("emp.json"), Employees.class);
            System.out.println("对象2:" + emp2);

            System.out.println("====================================================");

            //对象写为字节流
            byte[] bytes = objectMapper.writeValueAsBytes(employees1);
            //字节流转为对象
            Employees emp3 = objectMapper.readValue(bytes, Employees.class);
            System.out.println("对象3:" + emp3);

            System.out.println();
            System.out.println("*****************************************************");
            System.out.println();


            //Map和json互转
            Map<String, Object> map = Maps.newHashMap();
            map.put("001", employees1);
            map.put("002", "元旦");
            String mapToString = objectMapper.writeValueAsString(map);
            Map<String, Object> stringToMap = objectMapper.readValue(mapToString, new TypeReference<Map<String, Object>>() {
            });
            System.out.println("json字符串:" + mapToString);
            System.out.println("map:" + stringToMap);

            System.out.println("====================================================");

            //List和json互转
            List<Employees> empList = Lists.newArrayList(employees1, employees2);
            String jsonList = objectMapper.writeValueAsString(empList);
            List<Employees> stringToList = objectMapper.readValue(jsonList, new TypeReference<List<Employees>>() {
            });
            System.out.println("json字符串:" + jsonList);
            System.out.println("map:" + stringToList);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

打印结果:

json字符串:{"name":"秋一叶","age":18,"sex":"男"}
对象1:Employees(name=秋一叶, age=18, sex=男)
====================================================
对象2:Employees(name=秋一叶, age=18, sex=男)
====================================================
对象3:Employees(name=秋一叶, age=18, sex=男)

*****************************************************

json字符串:{"001":{"name":"秋一叶","age":18,"sex":"男"},"002":"元旦"}
map:{001={name=秋一叶, age=18, sex=男}, 002=元旦}
====================================================
json字符串:[{"name":"秋一叶","age":18,"sex":"男"},{"name":"小王","age":20,"sex":"男"}]
map:[Employees(name=秋一叶, age=18, sex=男), Employees(name=小王, age=20, sex=男)]

2、XML和对象互转

Department实体:

@Data
@JacksonXmlRootElement(localName = "RootName")
public class Department {
    @JacksonXmlProperty(localName = "DepName")
    private String depName;
    
    @JacksonXmlElementWrapper(localName = "EmpMessage")
    @JacksonXmlProperty(localName = "EmpName")
    List<Employees> employees; 
}

测试代码:

public class Demo1 {
    public static void main(String[] args) {
        XmlMapper xmlMapper = new XmlMapper();
        //字段为null,自动忽略,不再序列化
        xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        Department department = new Department();
        Employees employees1 = new Employees("秋一叶",18,"男");
        Employees employees2 = new Employees("小王",20,"男");
        department.setDepName("产品研发部门");
        department.setEmployees(Lists.newArrayList(employees1, employees2));

        try {
            //对象转xml
            String xml = xmlMapper.writeValueAsString(department);
            //xml转对象
            Department dep = xmlMapper.readValue(xml, Department.class);

            System.out.println("返回的xml:" + xml);
            System.out.println("返回的实体:" + dep);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

打印结果:

返回的xml:<RootName><DepName>产品研发部门</DepName><EmpMessage><EmpName><name>秋一叶</name><age>18</age><sex>男</sex></EmpName><EmpName><name>小王</name><age>20</age><sex>男</sex></EmpName></EmpMessage></RootName>
返回的实体:Department(depName=产品研发部门, employees=[Employees(name=秋一叶, age=18, sex=男), Employees(name=小王, age=20, sex=男)])

Jackson使用示例-Bean、XML、Json互转_jackson

到此这篇关于Jackson使用示例-Bean、XML、Json之间相互转换的文章就介绍到这了,更多相关Jackson使Bean、XML、Json互换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Java的Struts框架实现电子邮件发送功能

    利用Java的Struts框架实现电子邮件发送功能

    这篇文章主要介绍了利用Java的Struts框架实现电子邮件发送功能,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Java中RabbitMQ队列实现RPC详解

    Java中RabbitMQ队列实现RPC详解

    这篇文章主要介绍了Java中RabbitMQ队列实现RPC详解,在本教程中,我们将使用RabbitMQ构建一个RPC系统:一个客户端和一个RPC服务器,我们将创建一个返回斐波那契数字的模拟RPC服务,,需要的朋友可以参考下
    2023-08-08
  • SpringBoot启动时自动执行代码的几种实现方式

    SpringBoot启动时自动执行代码的几种实现方式

    这篇文章主要给大家介绍了关于SpringBoot启动时自动执行代码的几种实现方式,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Java中的命名与目录接口JNDI基本操作方法概览

    Java中的命名与目录接口JNDI基本操作方法概览

    这篇文章主要介绍了Java中的命名与目录接口JNDI基本操作方法概览,JNDI提供统一的客户端API使得Java应用程序可以和这些命名服务和目录服务之间进行交互,需要的朋友可以参考下
    2016-03-03
  • Java顺序表实现的扑克牌小游戏(附详细代码)

    Java顺序表实现的扑克牌小游戏(附详细代码)

    在扑克牌游戏中,我们有时需要判断一手牌是否是一个顺子,也就是判断5张牌是否连续,这篇文章主要介绍了Java顺序表实现的扑克牌小游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-10-10
  • Java Feign微服务接口调用方法详细讲解

    Java Feign微服务接口调用方法详细讲解

    现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。java如果使用微服务就离不开springcloud,我这里是把服务注册到nacos上,各个服务之间的调用使用feign
    2023-01-01
  • 23种设计模式(19)java责任链模式

    23种设计模式(19)java责任链模式

    这篇文章主要为大家详细介绍了23种设计模式之java责任链模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 新手了解java IO基础知识

    新手了解java IO基础知识

    这篇文章主要介绍了java 基础知识之IO总结的相关资料,Java中的I/O分为两种类型,一种是顺序读取,一种是随机读取,需要的朋友可以参考下,希望对你有帮助
    2021-07-07
  • Java SimpleDateFormat与System类使用示例详解

    Java SimpleDateFormat与System类使用示例详解

    这篇文章主要介绍了Java SimpleDateFormat与System类使用示例,对于SimpleDateFormat类,是一个用来区分区域设置的方式进行日期的是指,以及对日期进行处理分析的一个实现类
    2022-11-11
  • IDEA构建JavaWeb项目并通过Tomcat成功运行解读

    IDEA构建JavaWeb项目并通过Tomcat成功运行解读

    这篇文章主要介绍了IDEA构建JavaWeb项目并通过Tomcat成功运行方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-03-03

最新评论