Java的Jackson庫的使用及其樹模型的入門學習教程

NO IMAGE

Jackson第一個程式
在進入學習jackson庫的細節之前,讓我們來看看應用程式操作功能。在這個例子中,我們建立一個Student類。將建立一個JSON字串學生的詳細資訊,並將其反序列化到學生的物件,然後將其序列化到JSON字串。

建立一個名為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

現在執行jacksonTester看到的結果:
複製程式碼 程式碼如下:
C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出


Student [ name: Mahesh, age: 21 ]
{
"name" : "Mahesh",
"age" : 21
}

步驟 – 需要記住
以下是這裡要考慮的重要步驟。

第1步:建立ObjectMapper物件。
建立ObjectMapper物件。它是一個可重複使用的物件。\

複製程式碼 程式碼如下:

ObjectMapper mapper = new ObjectMapper();

第2步:反序列化JSON到物件。
從JSON物件使用readValue()方法來獲取。通過JSON字串和物件型別作為引數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節點樹。這是最靈活的方法。它類似於DOM解析器的XML。

從JSON建立樹
ObjectMapper提供一個指標樹的根節點在讀取JSON之後。根節點可用於遍歷完全樹。考慮下面的程式碼片段獲得提供JSON字串的根節點。


//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);

遍歷樹模型
使用相對路徑來根節點在遍歷樹,並處理該資料得到的每個節點。考慮下面的程式碼片段遍歷提供的根節點的樹。


JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "  nameNode.getTextValue());
JsonNode marksNode = rootNode.path("marks");
Iterator iterator = marksNode.getElements();

示例
建立一個名為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

現在執行jacksonTester看到結果:
複製程式碼 程式碼如下:
C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出


Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]

樹到JSON轉換
在這個例子中,我們已經使用JsonNode並將其寫入到一個JSON檔案,並讀回建立了一棵樹。

建立一個名為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

現在執行jacksonTester看到的結果:
複製程式碼 程式碼如下:
C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]
從樹到Java物件轉換
在這個例子中,我們已經使用JsonNode並將其寫入到一個JSON檔案,並回讀然後將一個Student物件其轉換為建立了一棵樹。

建立一個名為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

現在執行jacksonTester看到結果:
複製程式碼 程式碼如下:
C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出


Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]

您可能感興趣的文章:

舉例講解Java的Jackson庫中ObjectMapper類的使用解析Java的Jackson庫中物件的序列化與資料泛型繫結例項解析Java的Jackson庫中的資料繫結解析Java的Jackson庫中Streaming API的使用使用Jackson來實現Java物件與JSON的相互轉換的教程Java的Jackson庫中複雜物件集合的幾種簡單轉換