欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的Jackson庫的使用及其樹模型的入門學(xué)習(xí)教程

 更新時間:2016年01月13日 11:08:20   投稿:goldensun  
這篇文章主要介紹了Java的Jackson庫的使用及其樹模型入門學(xué)習(xí)教程,Jackson庫通常被用來作Java對象和JSON的互相轉(zhuǎn)換,需要的朋友可以參考下

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編譯如下類:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

現(xiàn)在運行jacksonTester看到的結(jié)果:
復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出

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

步驟 - 需要記住
以下是這里要考慮的重要步驟。

第1步:創(chuàng)建ObjectMapper對象。
創(chuàng)建ObjectMapper對象。它是一個可重復(fù)使用的對象。\

復(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編譯如下類:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

現(xiàn)在運行jacksonTester看到結(jié)果:
復(fù)制代碼 代碼如下:

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編譯如下類:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

現(xiàn)在運行jacksonTester看到的結(jié)果:
復(fù)制代碼 代碼如下:

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編譯如下類:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

現(xiàn)在運行jacksonTester看到結(jié)果:
復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出

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

相關(guān)文章

  • JVM角度調(diào)試優(yōu)化MyEclipse

    JVM角度調(diào)試優(yōu)化MyEclipse

    這篇文章主要介紹了從JVM角度對MyEclipse進行調(diào)試優(yōu)化,為大家分析調(diào)試優(yōu)化MyEclipse的步驟,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java之打印String對象的地址

    Java之打印String對象的地址

    這篇文章主要介紹了Java之打印String對象的地址,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 解析MapStruct轉(zhuǎn)換javaBean時出現(xiàn)的詭異事件

    解析MapStruct轉(zhuǎn)換javaBean時出現(xiàn)的詭異事件

    在項目中用到了MapStruct,對其可以轉(zhuǎn)換JavaBean特別好奇,今天小編給大家分享一個demo給大家講解MapStruct轉(zhuǎn)換javaBean時出現(xiàn)的詭異事件,感興趣的朋友一起看看吧
    2021-09-09
  • Java實現(xiàn)猜數(shù)程序

    Java實現(xiàn)猜數(shù)程序

    這篇文章主要為大家詳細介紹了Java實現(xiàn)猜數(shù)程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • JAVA提高第十篇 ArrayList深入分析

    JAVA提高第十篇 ArrayList深入分析

    這篇文章主要深入分析了JAVA提高第十篇ArrayList的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Spring boot如何快速的配置多個Redis數(shù)據(jù)源

    Spring boot如何快速的配置多個Redis數(shù)據(jù)源

    這篇文章主要介紹了Spring boot如何快速的配置多個Redis數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • idea全局設(shè)置Maven配置的實現(xiàn)步驟

    idea全局設(shè)置Maven配置的實現(xiàn)步驟

    本文主要介紹了idea全局設(shè)置Maven配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)

    Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)

    這篇文章主要介紹了如何利用Java語言編寫一個圖書管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下
    2022-03-03
  • ZooKeeper集群操作及集群Master選舉搭建啟動

    ZooKeeper集群操作及集群Master選舉搭建啟動

    這篇文章主要為大家介紹了ZooKeeper集群操作及集群Master選舉搭的建啟動詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 解決SpringBoot log4j日志沒生成的問題

    解決SpringBoot log4j日志沒生成的問題

    這篇文章主要介紹了解決SpringBoot log4j日志沒生成的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論