首頁 Java java教程 解析Java的Jackson函式庫中物件的序列化與資料泛型綁定

解析Java的Jackson函式庫中物件的序列化與資料泛型綁定

Jan 18, 2017 am 10:48 AM
jackson

Jackson物件序列化
這裡將介紹將Java物件序列化到一個JSON文件,然後再讀取JSON文件取得轉換為物件。在這個例子中,創建了Student類別。建立將有學生物件以JSON表示在一個student.json檔案。

建立一個名為JacksonTester在Java類別檔案在C:>Jackson_WORKSPACE.

檔案: JacksonTester.java

import java.io.File;
import java.io.IOException;
 
import org.codehaus.jackson.JsonGenerationException;
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 {
     Student student = new Student();
     student.setAge(10);
     student.setName("Mahesh");
     tester.writeJSON(student);
 
     Student student1 = tester.readJSON();
     System.out.println(student1);
 
   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }
 
  private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
   ObjectMapper mapper = new ObjectMapper(); 
   mapper.writeValue(new File("student.json"), student);
  }
 
  private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
   ObjectMapper mapper = new ObjectMapper();
   Student student = mapper.readValue(new File("student.json"), Student.class);
   return student;
  }
}
 
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
登入後複製
登入後複製

驗證輸出結果

C:\Jackson_WORKSPACE>java JacksonTester
登入後複製

Jackson資料綁定泛型

在簡單的資料綁定中,我們使用String作為關鍵對象,並作為一個值對象映射類別。相反,我們可以使用具體的Java物件和類型強制轉換到JSON使用。



考慮下面的範例使用一個類別的UserData來保存使用者專用資料。

建立一個名為JacksonTester在Java類別檔案目錄C:>Jackson_WORKSPACE.

檔案名稱: JacksonTester.java

Student [ name: Mahesh, age: 10 ]
登入後複製

驗證輸出

使用javacester.Tester

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
 
public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
     try {
      ObjectMapper mapper = new ObjectMapper();
 
      Map userDataMap = new HashMap();
      UserData studentData = new UserData(); 
      int[] marks = {1,2,3};
 
      Student student = new Student();
      student.setAge(10);
      student.setName("Mahesh");
      // JAVA Object
      studentData.setStudent(student);
      // JAVA String
      studentData.setName("Mahesh Kumar");
      // JAVA Boolean
      studentData.setVerified(Boolean.FALSE);
      // Array
      studentData.setMarks(marks);
      TypeReference ref = new TypeReference>() { };
      userDataMap.put("studentData1", studentData);
      mapper.writeValue(new File("student.json"), userDataMap);
      //{
      //  "studentData1":
      // {
      // "student":
      // {
      //  "name":"Mahesh",
      //  "age":10
      //   },
      //   "name":"Mahesh Kumar",
      //   "verified":false,
      //   "marks":[1,2,3]
      //  }
      //}
      userDataMap = mapper.readValue(new File("student.json"), ref);
 
      System.out.println(userDataMap.get("studentData1").getStudent());
      System.out.println(userDataMap.get("studentData1").getName());
      System.out.println(userDataMap.get("studentData1").getVerified());
      System.out.println(Arrays.toString(userDataMap.get("studentData1").getMarks()));
   } 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+ " ]";
  } 
}
 
class UserData {
  private Student student;
  private String name;
  private Boolean verified;
  private int[] marks;
 
  public UserData(){}
 
  public Student getStudent() {
   return student;
  }
  public void setStudent(Student student) {
   this.student = student;
  }
  public String getName() {
   return name;
  }
  public void setName(String name) {
   this.name = name;
  }
  public Boolean getVerified() {
   return verified;
  }
  public void setVerified(Boolean verified) {
   this.verified = verified;
  }
  public int[] getMarks() {
   return marks;
  }
  public void setMarks(int[] marks) {
   this.marks = marks;
  } 
}
登入後複製

驗證輸出

C:\Jackson_WORKSPACE>javac JacksonTester.java
登入後複製
登入後複製

更多解析Java的Jackson庫中物件的序列化與資料泛型綁定相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
在Java中使用Jackson函式庫將CSV轉換為JSON? 在Java中使用Jackson函式庫將CSV轉換為JSON? Aug 18, 2023 pm 11:49 PM

AJackson 是一個提供了多種不同方式來處理JSON的Java JSONAPI。我們可以使用CsvMapper 類別將CSV資料轉換為JSON數據,它是一個特殊的ObjectMapper,具有擴展功能,可以將POJOs轉換為CsvSchema 實例。我們可以使用 reader() 方法來建構具有預設設定的ObjectReader。為了進行轉換,我們需要導入com.fasterxml.jac

如何使用Jackson在Java中將JSON物件轉換為枚舉類型? 如何使用Jackson在Java中將JSON物件轉換為枚舉類型? Sep 05, 2023 pm 12:13 PM

JSONObject可以解析字串中的文字以產生Map類型的物件。枚舉可用於定義常數集合,當我們需要一個不代表某種數字或文字資料的預定義值清單時,我們可以使用枚舉。我們可以使用ObjectMapper類別的readValue()方法將JSON物件轉換為枚舉。在下面的範例中,我們可以使用Jackson函式庫將JSON物件轉換/反序列化為Java枚舉。範例importcom.fasterxml.jackson.databind.*;publicclassJSONToEnumTest{ &

SpringBoot升級指定jackson版本的問題怎麼解決 SpringBoot升級指定jackson版本的問題怎麼解決 May 12, 2023 pm 02:13 PM

【漏洞通告】2月19日,NVD發布安全通告揭露了jackson-databind由JNDI注入導致的遠端程式碼執行漏洞(CVE-2020-8840),CVSS評分為9.8。受影響版本的jackson-databind中由於缺少某些xbean-reflect/JNDI黑名單類,如org.apache.xbean.propertyeditor.JndiConverter,可導致攻擊者使用JNDI注入的方式實現遠端程式碼執行。目前廠商已發布新版本完成漏洞修復,請相關用戶及時升級進行防護。由於專案中用到的S

在Java中使用Jackson函式庫將XML轉換為POJO? 在Java中使用Jackson函式庫將XML轉換為POJO? Aug 30, 2023 am 10:21 AM

JSONJackson 是Java 函式庫。它具有非常強大的資料綁定功能,並提供了一個框架來將自訂Java 物件序列化為JSON 並將JSON 反序列化回Java 物件。我們也可以使用XmlMapper 的readValue() 方法將XML 格式轉換為POJO 對象

在Java中使用Jackson函式庫將POJO轉換為XML? 在Java中使用Jackson函式庫將POJO轉換為XML? Sep 18, 2023 pm 02:21 PM

Jackson是一個基於Java的函式庫,它對於將Java物件轉換為JSON以及將JSON轉換為Java物件非常有用。 JacksonAPI比其他API更快,需要更少的記憶體區域,並且適合大型物件。我們使用XmlMapper類別的writeValueAsString()方法將POJO轉換為XML格式,並且需要將對應的POJO實例作為參數傳遞給此方法。語法publicStringwriteValueAsString(Objectvalue)throwsJsonProcessingException範例imp

Java怎麼用Jackson序列化實現資料脫敏 Java怎麼用Jackson序列化實現資料脫敏 Apr 18, 2023 am 09:46 AM

1.背景在專案中有些敏感資訊不能直接展示,例如客戶手機號碼、身分證、車牌號碼等信息,展示時均需要進行資料脫敏,防止洩露客戶隱私。脫敏即是對資料的部分資訊用脫敏符號(*)處理。 2.目標在服務端回傳資料時,利用Jackson序列化完成資料脫敏,達到對敏感資訊脫敏展示。降低重複開發量,提升開發效率形成統一有效的脫敏規則可基於重寫預設脫敏實現的desensitize方法,實現可擴展、可自訂的個性化業務場景的脫敏需求3.主要實現3.1基於Jackson的自訂脫敏序列化實作StdSerializer:所有標

如何在Java中使用Jackson取得JSONParser的預設值? 如何在Java中使用Jackson取得JSONParser的預設值? Sep 12, 2023 am 11:57 AM

所有JSON 解析器的預設設定都可以使用JsonParser.Feature枚舉來表示。 JsonParser.Feature.values()將傳回所有可用於JSONParser 的功能,但是特定解析器是否啟用或停用某個功能可以使用JsonParser的isEnabled()方法來確定。語法publicstaticenumJsonParser.FeatureextendsEnum<JsonParser.Feature>範例importcom.fas

在Java中使用Jackson時何時使用@ConstructorProperties註解? 在Java中使用Jackson時何時使用@ConstructorProperties註解? Aug 27, 2023 pm 08:53 PM

@ConstructorProperties註解來自java.bean套件,用於透過帶有註解的建構函數將JSON反序列化為java物件。此註解從Jackson2.7版本開始支援。此註解的工作方式非常簡單,我們可以提供一個包含每個建構函式參數的屬性名稱的數組,而不是註解建構函式中的每個參數。語法@Documented@Target(value=CONSTRUCTOR)@Retention(value=RUNTIME)public@interfaceConstructorProperties範例impo

See all articles