Java的Jackson庫的使用及其樹模型的入門學習教程
Jackson第一個程序
在進入學習jackson庫的細節(jié)之前,讓我們來看看應用程序操作功能。在這個例子中,我們創(chuàng)建一個Student類。將創(chuàng)建一個JSON字符串學生的詳細信息,并將其反序列化到學生的對象,然后將其序列化到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+ " ]";
}
}
驗證結果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到的結果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
步驟 - 需要記住
以下是這里要考慮的重要步驟。
第1步:創(chuàng)建ObjectMapper對象。
創(chuàng)建ObjectMapper對象。它是一個可重復使用的對象。\
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文件的內存樹表示。 ObjectMapper構建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();
}
}
}
驗證輸出結果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到結果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
樹到JSON轉換
在這個例子中,我們已經(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();
}
}
}
驗證結果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到的結果:
C:\Jackson_WORKSPACE>java JacksonTester
驗證輸出
Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]
從樹到Java對象轉換
在這個例子中,我們已經(jīng)使用JsonNode并將其寫入到一個JSON文件,并回讀然后將一個Student對象其轉換為創(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;
}
}
驗證結果
使用javac編譯如下類:
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運行jacksonTester看到結果:
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字符串轉換成泛型List
- java的Jackson框架實現(xiàn)輕易轉換JSON
- Java的Jackson庫中復雜對象集合的幾種簡單轉換
- 舉例講解Java的Jackson庫中ObjectMapper類的使用
- 解析Java的Jackson庫中對象的序列化與數(shù)據(jù)泛型綁定
- 實例解析Java的Jackson庫中的數(shù)據(jù)綁定
- 使用Jackson來實現(xiàn)Java對象與JSON的相互轉換的教程
- 詳解Jackson的基本用法
相關文章
java反射調用方法NoSuchMethodException的解決方案
這篇文章主要介紹了java反射調用方法NoSuchMethodException的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
SpringBoot?Test的webEnvironment源碼解讀
這篇文章主要為大家介紹了SpringBoot?Test的webEnvironment源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
IDEA下使用MyBatisCodeHelper插件的方法詳解
這篇文章主要介紹了IDEA下使用MyBatisCodeHelper插件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
RestTemplate對HttpClient的適配源碼解讀
這篇文章主要為大家介紹了RestTemplate對HttpClient的適配源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
通過實例了解java checked和unchecked異常
這篇文章主要介紹了通過實例了解checked和unchecked異常,Java異常分為兩種類型,checked異常和unchecked異常,另一種叫法是異常和錯誤。下面小編就帶大家來一起學習一下吧2019-06-06
SpringBoot集成ElasticSearch(ES)實現(xiàn)全文搜索功能
Elasticsearch是一個開源的分布式搜索和分析引擎,它被設計用于處理大規(guī)模數(shù)據(jù)集,它提供了一個分布式多用戶能力的全文搜索引擎,本文將給大家介紹SpringBoot集成ElasticSearch(ES)實現(xiàn)全文搜索功能,需要的朋友可以參考下2024-02-02
SpringCloud OpenFeign基本介紹與實現(xiàn)示例
OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡通信的細節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡通信細節(jié)。所有遠程調用,都像調用本地方法一樣完成2023-02-02

