解析Java的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

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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