Java的Jackson庫的使用及其樹模型的入門學(xué)習(xí)教程
Jackson第一個程序
在進入學(xué)習(xí)jackson庫的細節(jié)之前,讓我們來看看應(yīng)用程序操作功能。在這個例子中,我們創(chuàng)建一個Student類。將創(chuàng)建一個JSON字符串學(xué)生的詳細信息,并將其反序列化到學(xué)生的對象,然后將其序列化到JSON字符串。
創(chuàng)建一個名為JacksonTester在Java類文件 C:\>Jackson_WORKSPACE.
文件: JacksonTester.java
import java.io.IOException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; public class JacksonTester { public static void main(String args[]){ ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"name\":\"Mahesh\", \"age\":21}"; //map json to student try { Student student = mapper.readValue(jsonString, Student.class); System.out.println(student); mapper.enable(SerializationConfig.Feature.INDENT_OUTPUT); jsonString = mapper.writeValueAsString(student); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class Student { private String name; private int age; public Student(){} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString(){ return "Student [ name: "+name+", age: "+ age+ " ]"; } }
驗證結(jié)果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到的結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 21 ] { "name" : "Mahesh", "age" : 21 }
步驟 - 需要記住
以下是這里要考慮的重要步驟。
第1步:創(chuàng)建ObjectMapper對象。
創(chuàng)建ObjectMapper對象。它是一個可重復(fù)使用的對象。\
ObjectMapper mapper = new ObjectMapper();
第2步:反序列化JSON到對象。
從JSON對象使用readValue()方法來獲取。通過JSON字符串和對象類型作為參數(shù)JSON字符串/來源。
//Object to JSON Conversion Student student = mapper.readValue(jsonString, Student.class);
第3步:序列化對象到JSON。
使用writeValueAsString()方法來獲取對象的JSON字符串表示。
//Object to JSON Conversion jsonString = mapper.writeValueAsString(student);
Jackson樹模型
樹模型準備JSON文件的內(nèi)存樹表示。 ObjectMapper構(gòu)建JsonNode節(jié)點樹。這是最靈活的方法。它類似于DOM解析器的XML。
從JSON創(chuàng)建樹
ObjectMapper提供一個指針樹的根節(jié)點在讀取JSON之后。根節(jié)點可用于遍歷完全樹。考慮下面的代碼片段獲得提供JSON字符串的根節(jié)點。
//Create an ObjectMapper instance ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}"; //create tree from JSON JsonNode rootNode = mapper.readTree(jsonString);
遍歷樹模型
使用相對路徑來根節(jié)點在遍歷樹,并處理該數(shù)據(jù)得到的每個節(jié)點。考慮下面的代碼片段遍歷提供的根節(jié)點的樹。
JsonNode nameNode = rootNode.path("name"); System.out.println("Name: "+ nameNode.getTextValue()); JsonNode marksNode = rootNode.path("marks"); Iterator iterator = marksNode.getElements();
示例
創(chuàng)建一個名為JacksonTester在Java類文件目錄 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.IOException; import java.util.Iterator; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JacksonTester { public static void main(String args[]){ JacksonTester tester = new JacksonTester(); try { ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}"; JsonNode rootNode = mapper.readTree(jsonString); JsonNode nameNode = rootNode.path("name"); System.out.println("Name: "+ nameNode.getTextValue()); JsonNode ageNode = rootNode.path("age"); System.out.println("Age: " + ageNode.getIntValue()); JsonNode verifiedNode = rootNode.path("verified"); System.out.println("Verified: " + (verifiedNode.getBooleanValue() ? "Yes":"No")); JsonNode marksNode = rootNode.path("marks"); Iterator<JsonNode> iterator = marksNode.getElements(); System.out.print("Marks: [ "); while (iterator.hasNext()) { JsonNode marks = iterator.next(); System.out.print(marks.getIntValue() + " "); } System.out.println("]"); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
驗證輸出結(jié)果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
樹到JSON轉(zhuǎn)換
在這個例子中,我們已經(jīng)使用JsonNode并將其寫入到一個JSON文件,并讀回創(chuàng)建了一棵樹。
創(chuàng)建一個名為JacksonTester在Java類文件目錄 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File; import java.io.IOException; import java.util.Iterator; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ArrayNode; import org.codehaus.jackson.node.ObjectNode; public class JacksonTester { public static void main(String args[]){ JacksonTester tester = new JacksonTester(); try { ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.createObjectNode(); JsonNode marksNode = mapper.createArrayNode(); ((ArrayNode)marksNode).add(100); ((ArrayNode)marksNode).add(90); ((ArrayNode)marksNode).add(85); ((ObjectNode) rootNode).put("name", "Mahesh Kumar"); ((ObjectNode) rootNode).put("age", 21); ((ObjectNode) rootNode).put("verified", false); ((ObjectNode) rootNode).put("marks",marksNode); mapper.writeValue(new File("student.json"), rootNode); rootNode = mapper.readTree(new File("student.json")); JsonNode nameNode = rootNode.path("name"); System.out.println("Name: "+ nameNode.getTextValue()); JsonNode ageNode = rootNode.path("age"); System.out.println("Age: " + ageNode.getIntValue()); JsonNode verifiedNode = rootNode.path("verified"); System.out.println("Verified: " + (verifiedNode.getBooleanValue() ? "Yes":"No")); JsonNode marksNode1 = rootNode.path("marks"); Iterator<JsonNode> iterator = marksNode1.getElements(); System.out.print("Marks: [ "); while (iterator.hasNext()) { JsonNode marks = iterator.next(); System.out.print(marks.getIntValue() + " "); } System.out.println("]"); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
驗證結(jié)果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到的結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]
從樹到Java對象轉(zhuǎn)換
在這個例子中,我們已經(jīng)使用JsonNode并將其寫入到一個JSON文件,并回讀然后將一個Student對象其轉(zhuǎn)換為創(chuàng)建了一棵樹。
創(chuàng)建一個名為JacksonTester在Java類文件目錄 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File; import java.io.IOException; import java.util.Arrays; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ArrayNode; import org.codehaus.jackson.node.ObjectNode; public class JacksonTester { public static void main(String args[]){ JacksonTester tester = new JacksonTester(); try { ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.createObjectNode(); JsonNode marksNode = mapper.createArrayNode(); ((ArrayNode)marksNode).add(100); ((ArrayNode)marksNode).add(90); ((ArrayNode)marksNode).add(85); ((ObjectNode) rootNode).put("name", "Mahesh Kumar"); ((ObjectNode) rootNode).put("age", 21); ((ObjectNode) rootNode).put("verified", false); ((ObjectNode) rootNode).put("marks",marksNode); mapper.writeValue(new File("student.json"), rootNode); rootNode = mapper.readTree(new File("student.json")); Student student = mapper.treeToValue(rootNode, Student.class); System.out.println("Name: "+ student.getName()); System.out.println("Age: " + student.getAge()); System.out.println("Verified: " + (student.isVerified() ? "Yes":"No")); System.out.println("Marks: "+Arrays.toString(student.getMarks())); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } class Student { String name; int age; boolean verified; int[] marks; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isVerified() { return verified; } public void setVerified(boolean verified) { this.verified = verified; } public int[] getMarks() { return marks; } public void setMarks(int[] marks) { this.marks = marks; } }
驗證結(jié)果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
- java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時間序列化
- Java下利用Jackson進行JSON解析和序列化示例
- java的Jackson將json字符串轉(zhuǎn)換成泛型List
- java的Jackson框架實現(xiàn)輕易轉(zhuǎn)換JSON
- Java的Jackson庫中復(fù)雜對象集合的幾種簡單轉(zhuǎn)換
- 舉例講解Java的Jackson庫中ObjectMapper類的使用
- 解析Java的Jackson庫中對象的序列化與數(shù)據(jù)泛型綁定
- 實例解析Java的Jackson庫中的數(shù)據(jù)綁定
- 使用Jackson來實現(xiàn)Java對象與JSON的相互轉(zhuǎn)換的教程
- 詳解Jackson的基本用法
相關(guān)文章
解析MapStruct轉(zhuǎn)換javaBean時出現(xiàn)的詭異事件
在項目中用到了MapStruct,對其可以轉(zhuǎn)換JavaBean特別好奇,今天小編給大家分享一個demo給大家講解MapStruct轉(zhuǎn)換javaBean時出現(xiàn)的詭異事件,感興趣的朋友一起看看吧2021-09-09Spring boot如何快速的配置多個Redis數(shù)據(jù)源
這篇文章主要介紹了Spring boot如何快速的配置多個Redis數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06idea全局設(shè)置Maven配置的實現(xiàn)步驟
本文主要介紹了idea全局設(shè)置Maven配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)
這篇文章主要介紹了如何利用Java語言編寫一個圖書管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下2022-03-03