Jackson使用示例-Bean、XML、Json之间相互转换
作者:秋一叶叶
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使Bean、XML、Json互换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!