Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換
前言
目前常見的json解析工具有jackson、fastjson、gson。
- jackson是Spring mvc內(nèi)置的json轉(zhuǎn)換工具;
- fastjson是阿里的開源JSON解析庫,由于fastjson經(jīng)常會出現(xiàn)漏洞,暫不考慮;
- Jackson是一個強大工具,可用于Json、XML、實體之間的相互轉(zhuǎn)換。
Jackson相關(guān)注解
注解 | 說明 |
@JsonProperties | 把屬性的名稱序列化時轉(zhuǎn)換為另外一個名稱 ;@JsonProperty(“DepName”) |
@JsonFormat | 把屬性的格式序列化時轉(zhuǎn)換成指定的格式;@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互轉(zhuǎn)
引入jackson相關(guān)依賴:
<!--注解包,提供標準注解功能--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <!--核心包,提供基于"流模式"解析的相關(guān) API--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </dependency> <!--數(shù)據(jù)綁定包,提供基于"對象綁定" 解析的相關(guān) API ( ObjectMapper ) 和"樹模型" 解析的相關(guān) 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互轉(zhuǎn) * */ public class Demo2 { public static void main(String[] args) { ObjectMapper objectMapper = new ObjectMapper(); Employees employees1 = new Employees("秋一葉",18,"男"); Employees employees2 = new Employees("小王",20,"男"); try { //對象轉(zhuǎn)json字符串 String jsonString = objectMapper.writeValueAsString(employees1); //json字符串轉(zhuǎn)為對象 Employees emp1 = objectMapper.readValue(jsonString, Employees.class); System.out.println("json字符串:" + jsonString); System.out.println("對象1:" + emp1); System.out.println("===================================================="); //對象轉(zhuǎn)為json字符串寫入文件 objectMapper.writeValue(new File("emp.json"), employees1); //從文件中讀取json字符串轉(zhuǎn)為對象 Employees emp2 = objectMapper.readValue(new File("emp.json"), Employees.class); System.out.println("對象2:" + emp2); System.out.println("===================================================="); //對象寫為字節(jié)流 byte[] bytes = objectMapper.writeValueAsBytes(employees1); //字節(jié)流轉(zhuǎn)為對象 Employees emp3 = objectMapper.readValue(bytes, Employees.class); System.out.println("對象3:" + emp3); System.out.println(); System.out.println("*****************************************************"); System.out.println(); //Map和json互轉(zhuǎn) 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互轉(zhuǎn) 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(); } } }
打印結(jié)果:
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和對象互轉(zhuǎn)
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("產(chǎn)品研發(fā)部門"); department.setEmployees(Lists.newArrayList(employees1, employees2)); try { //對象轉(zhuǎn)xml String xml = xmlMapper.writeValueAsString(department); //xml轉(zhuǎn)對象 Department dep = xmlMapper.readValue(xml, Department.class); System.out.println("返回的xml:" + xml); System.out.println("返回的實體:" + dep); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
打印結(jié)果:
返回的xml:<RootName><DepName>產(chǎn)品研發(fā)部門</DepName><EmpMessage><EmpName><name>秋一葉</name><age>18</age><sex>男</sex></EmpName><EmpName><name>小王</name><age>20</age><sex>男</sex></EmpName></EmpMessage></RootName> 返回的實體:Department(depName=產(chǎn)品研發(fā)部門, employees=[Employees(name=秋一葉, age=18, sex=男), Employees(name=小王, age=20, sex=男)])
到此這篇關(guān)于Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Jackson使Bean、XML、Json互換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一篇文章了解Jackson注解@JsonFormat及失效解決辦法
- Java中對象?和?json?互轉(zhuǎn)四種方式?json-lib、Gson、FastJson、Jackson
- 利用Jackson解決Json序列化和反序列化問題
- Java利用Jackson輕松處理JSON序列化與反序列化
- Jackson中json格式的字符串與對象的互相轉(zhuǎn)換方式
- 如何自定義Jackson序列化?@JsonSerialize
- JSON中fastjson、jackson、gson如何選擇
- jackson 如何將實體轉(zhuǎn)json json字符串轉(zhuǎn)實體
- 使用jackson實現(xiàn)對象json之間的相互轉(zhuǎn)換(spring boot)
- 使用Jackson-json解析一個嵌套的json字符串
- Jackson庫進行JSON?序列化時遇到了無限遞歸(Infinite?Recursion)的問題及解決方案
相關(guān)文章
Spring中AOP概念與兩種動態(tài)代理模式原理詳解
AOP是面向切面編程的技術(shù),AOP基于IoC基礎(chǔ),是對OOP的有益補充,流行的AOP框架有Sping AOP、AspectJ,這篇文章主要給大家介紹了關(guān)于Spring中AOP概念與兩種動態(tài)代理模式原理的相關(guān)資料,需要的朋友可以參考下2021-10-10