最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定

 更新時(shí)間:2016年01月13日 11:42:16   投稿:goldensun  
這篇文章主要介紹了解析Java的Jackson庫(kù)中對(duì)象的序列化與數(shù)據(jù)泛型綁定,Jackson通常被用來(lái)實(shí)現(xiàn)Java對(duì)象和JSON數(shù)據(jù)的相互轉(zhuǎn)換功能,需要的朋友可以參考下

Jackson對(duì)象序列化
這里將介紹將Java對(duì)象序列化到一個(gè)JSON文件,然后再讀取JSON文件獲取轉(zhuǎn)換為對(duì)象。在這個(gè)例子中,創(chuàng)建了Student類(lèi)。創(chuàng)建將有學(xué)生對(duì)象以JSON表示在一個(gè)student.json文件。

創(chuàng)建一個(gè)名為JacksonTester在Java類(lèi)文件在 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+ " ]";
  } 
}

驗(yàn)證結(jié)果

使用 javac 編譯如下類(lèi):

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

C:\Jackson_WORKSPACE>javac JacksonTester.java

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

C:\Jackson_WORKSPACE>java JacksonTester

驗(yàn)證輸出結(jié)果
復(fù)制代碼 代碼如下:

Student [ name: Mahesh, age: 10 ]

Jackson數(shù)據(jù)綁定泛型
在簡(jiǎn)單的數(shù)據(jù)綁定中,我們使用String作為關(guān)鍵對(duì)象,并作為一個(gè)值對(duì)象映射類(lèi)。相反,我們可以使用具體的Java對(duì)象和類(lèi)型強(qiáng)制轉(zhuǎn)換到JSON使用。

考慮下面的例子使用一個(gè)類(lèi)的UserData來(lái)保存用戶專(zhuān)用數(shù)據(jù)。

創(chuàng)建一個(gè)名為JacksonTester在Java類(lèi)文件目錄 C:\>Jackson_WORKSPACE.

文件名: JacksonTester.java

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;
  } 
}

驗(yàn)證輸出

使用javac編譯如下類(lèi):

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

C:\Jackson_WORKSPACE>javac JacksonTester.java

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

C:\Jackson_WORKSPACE>java JacksonTester

驗(yàn)證輸出

Student [ name: Mahesh, age: 10 ]
Mahesh Kumar
false
[1, 2, 3]

相關(guān)文章

  • SpringBoot日志配置SLF4J和Logback的方法實(shí)現(xiàn)

    SpringBoot日志配置SLF4J和Logback的方法實(shí)現(xiàn)

    日志記錄是不可或缺的一部分,本文主要介紹了SpringBoot日志配置SLF4J和Logback的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • SpringBoot任務(wù)調(diào)度器的實(shí)現(xiàn)代碼

    SpringBoot任務(wù)調(diào)度器的實(shí)現(xiàn)代碼

    SpringBoot自帶了任務(wù)調(diào)度器,通過(guò)注解的方式使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 基于Hadoop實(shí)現(xiàn)Knn算法

    基于Hadoop實(shí)現(xiàn)Knn算法

    這篇文章主要為大家詳細(xì) 介紹了基于Hadoop實(shí)現(xiàn)Knn算法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Hadoop源碼分析二安裝配置過(guò)程詳解

    Hadoop源碼分析二安裝配置過(guò)程詳解

    本篇是Hadoop源碼分析系列文章第二篇,主要介紹Hadoop安裝配置的詳細(xì)過(guò)程,后續(xù)本系列文章會(huì)持續(xù)更新,有需要的朋友可以借鑒參考下
    2021-09-09
  • Spring Cloud Hystrix 線程池隊(duì)列配置(踩坑)

    Spring Cloud Hystrix 線程池隊(duì)列配置(踩坑)

    這篇文章主要介紹了Spring Cloud Hystrix 線程池隊(duì)列配置(踩坑),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • java中的文件操作總結(jié)(干貨)

    java中的文件操作總結(jié)(干貨)

    本篇文章主要介紹了java中的文件操作總結(jié)(干貨),主要有文件讀寫(xiě),遍歷文件夾,文件夾操作等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類(lèi)生成json方式

    Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類(lèi)生成json方式

    這篇文章主要介紹了Jackson2的JsonSchema實(shí)現(xiàn)java實(shí)體類(lèi)生成json,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案

    java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案

    這篇文章主要介紹了java 反射調(diào)用Service導(dǎo)致Spring注入Dao失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot中攔截器和動(dòng)態(tài)代理的區(qū)別詳解

    SpringBoot中攔截器和動(dòng)態(tài)代理的區(qū)別詳解

    在?Spring?Boot?中,攔截器和動(dòng)態(tài)代理都是用來(lái)實(shí)現(xiàn)功能增強(qiáng)的,所以在很多時(shí)候,有人會(huì)認(rèn)為攔截器的底層是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的,所以本文就來(lái)盤(pán)點(diǎn)一下他們兩的區(qū)別,以及攔截器的底層實(shí)現(xiàn)吧
    2023-09-09
  • 關(guān)于HashSet與HashMap的區(qū)別及說(shuō)明

    關(guān)于HashSet與HashMap的區(qū)別及說(shuō)明

    這篇文章主要介紹了關(guān)于HashSet與HashMap的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

化德县| 额敏县| 合江县| 横峰县| 商洛市| 阿瓦提县| 武夷山市| 卢湾区| 信丰县| 通山县| 梧州市| 惠来县| 杂多县| 香港| 新疆| 和龙市| 乌审旗| 西城区| 佛教| 延安市| 湘潭县| 梁山县| 怀来县| 温泉县| 库尔勒市| 波密县| 竹溪县| 广宗县| 静宁县| 绩溪县| 临海市| 遵化市| 进贤县| 资阳市| 含山县| 武山县| 宝坻区| 潍坊市| 麻城市| 自治县| 塘沽区|