Java的Jackson庫(kù)的使用及其樹(shù)模型的入門(mén)學(xué)習(xí)教程
Jackson第一個(gè)程序
在進(jìn)入學(xué)習(xí)jackson庫(kù)的細(xì)節(jié)之前,讓我們來(lái)看看應(yīng)用程序操作功能。在這個(gè)例子中,我們創(chuàng)建一個(gè)Student類(lèi)。將創(chuàng)建一個(gè)JSON字符串學(xué)生的詳細(xì)信息,并將其反序列化到學(xué)生的對(duì)象,然后將其序列化到JSON字符串。
創(chuàng)建一個(gè)名為JacksonTester在Java類(lèi)文件 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+ " ]";
}
}
驗(yàn)證結(jié)果
使用javac編譯如下類(lèi):
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運(yùn)行jacksonTester看到的結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗(yàn)證輸出
Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}
步驟 - 需要記住
以下是這里要考慮的重要步驟。
第1步:創(chuàng)建ObjectMapper對(duì)象。
創(chuàng)建ObjectMapper對(duì)象。它是一個(gè)可重復(fù)使用的對(duì)象。\
ObjectMapper mapper = new ObjectMapper();
第2步:反序列化JSON到對(duì)象。
從JSON對(duì)象使用readValue()方法來(lái)獲取。通過(guò)JSON字符串和對(duì)象類(lèi)型作為參數(shù)JSON字符串/來(lái)源。
//Object to JSON Conversion Student student = mapper.readValue(jsonString, Student.class);
第3步:序列化對(duì)象到JSON。
使用writeValueAsString()方法來(lái)獲取對(duì)象的JSON字符串表示。
//Object to JSON Conversion jsonString = mapper.writeValueAsString(student);
Jackson樹(shù)模型
樹(shù)模型準(zhǔn)備JSON文件的內(nèi)存樹(shù)表示。 ObjectMapper構(gòu)建JsonNode節(jié)點(diǎn)樹(shù)。這是最靈活的方法。它類(lèi)似于DOM解析器的XML。
從JSON創(chuàng)建樹(shù)
ObjectMapper提供一個(gè)指針樹(shù)的根節(jié)點(diǎn)在讀取JSON之后。根節(jié)點(diǎn)可用于遍歷完全樹(shù)??紤]下面的代碼片段獲得提供JSON字符串的根節(jié)點(diǎn)。
//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);
遍歷樹(shù)模型
使用相對(duì)路徑來(lái)根節(jié)點(diǎn)在遍歷樹(shù),并處理該數(shù)據(jù)得到的每個(gè)節(jié)點(diǎn)??紤]下面的代碼片段遍歷提供的根節(jié)點(diǎn)的樹(shù)。
JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.getTextValue());
JsonNode marksNode = rootNode.path("marks");
Iterator iterator = marksNode.getElements();
示例
創(chuàng)建一個(gè)名為JacksonTester在Java類(lèi)文件目錄 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();
}
}
}
驗(yàn)證輸出結(jié)果
使用javac編譯如下類(lèi):
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運(yùn)行jacksonTester看到結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗(yàn)證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
樹(shù)到JSON轉(zhuǎn)換
在這個(gè)例子中,我們已經(jīng)使用JsonNode并將其寫(xiě)入到一個(gè)JSON文件,并讀回創(chuàng)建了一棵樹(shù)。
創(chuàng)建一個(gè)名為JacksonTester在Java類(lèi)文件目錄 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();
}
}
}
驗(yàn)證結(jié)果
使用javac編譯如下類(lèi):
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運(yùn)行jacksonTester看到的結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗(yàn)證輸出
Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]
從樹(shù)到Java對(duì)象轉(zhuǎn)換
在這個(gè)例子中,我們已經(jīng)使用JsonNode并將其寫(xiě)入到一個(gè)JSON文件,并回讀然后將一個(gè)Student對(duì)象其轉(zhuǎn)換為創(chuàng)建了一棵樹(shù)。
創(chuàng)建一個(gè)名為JacksonTester在Java類(lèi)文件目錄 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;
}
}
驗(yàn)證結(jié)果
使用javac編譯如下類(lèi):
C:\Jackson_WORKSPACE>javac JacksonTester.java
現(xiàn)在運(yùn)行jacksonTester看到結(jié)果:
C:\Jackson_WORKSPACE>java JacksonTester
驗(yàn)證輸出
Name: Mahesh Kumar Age: 21 Verified: No Marks: [ 100 90 85 ]
- java如何利用FastJSON、Gson、Jackson三種Json格式工具自定義時(shí)間序列化
- Java下利用Jackson進(jìn)行JSON解析和序列化示例
- java的Jackson將json字符串轉(zhuǎn)換成泛型List
- java的Jackson框架實(shí)現(xiàn)輕易轉(zhuǎn)換JSON
- Java的Jackson庫(kù)中復(fù)雜對(duì)象集合的幾種簡(jiǎn)單轉(zhuǎn)換
- 舉例講解Java的Jackson庫(kù)中ObjectMapper類(lèi)的使用
- 解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定
- 實(shí)例解析Java的Jackson庫(kù)中的數(shù)據(jù)綁定
- 使用Jackson來(lái)實(shí)現(xiàn)Java對(duì)象與JSON的相互轉(zhuǎn)換的教程
- 詳解Jackson的基本用法
相關(guān)文章
解析MapStruct轉(zhuǎn)換javaBean時(shí)出現(xiàn)的詭異事件
在項(xiàng)目中用到了MapStruct,對(duì)其可以轉(zhuǎn)換JavaBean特別好奇,今天小編給大家分享一個(gè)demo給大家講解MapStruct轉(zhuǎn)換javaBean時(shí)出現(xiàn)的詭異事件,感興趣的朋友一起看看吧2021-09-09
Spring boot如何快速的配置多個(gè)Redis數(shù)據(jù)源
這篇文章主要介紹了Spring boot如何快速的配置多個(gè)Redis數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
idea全局設(shè)置Maven配置的實(shí)現(xiàn)步驟
本文主要介紹了idea全局設(shè)置Maven配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Java實(shí)戰(zhàn)之圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java語(yǔ)言編寫(xiě)一個(gè)圖書(shū)管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下2022-03-03
ZooKeeper集群操作及集群Master選舉搭建啟動(dòng)
這篇文章主要為大家介紹了ZooKeeper集群操作及集群Master選舉搭的建啟動(dòng)詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
解決SpringBoot log4j日志沒(méi)生成的問(wèn)題
這篇文章主要介紹了解決SpringBoot log4j日志沒(méi)生成的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

