首頁 > Java > java教程 > Java下利用Jackson進行JSON解析與序列化範例

Java下利用Jackson進行JSON解析與序列化範例

高洛峰
發布: 2017-02-16 16:47:14
原創
1386 人瀏覽過

這篇文章主要介紹了Java下利用Jackson進行JSON解析和序列化範例,具有一定的參考價值,有興趣的小夥伴們可以參考一下。

Java下常見的Json類別庫有Gson、JSON-lib和Jackson等,Jackson相對來說比較高效,在專案中主要使用Jackson進行JSON和Java物件轉換,下面給出一些Jackson的JSON操作方法。

一、準備工作

先到官網下載Jackson工具包。 Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3個jar包要下載:

jackson-core-2.2.3.jar

jackson-annotations-2.2.3.jar

jackson-databind-2.2.3.jar

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

//JSON序列化和反序列化使用的User类

import java.util.Date;

  

public class User {

  private String name;

  private Integer age;

  private Date birthday;

  private String email;

    

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

    

  public Integer getAge() {

    return age;

  }

  public void setAge(Integer age) {

    this.age = age;

  }

    

  public Date getBirthday() {

    return birthday;

  }

  public void setBirthday(Date birthday) {

    this.birthday = birthday;

  }

    

  public String getEmail() {

    return email;

  }

  public void setEmail(String email) {

    this.email = email;

  }

}

登入後複製

SON

、J

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

import java.io.IOException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

  

import com.fasterxml.jackson.databind.ObjectMapper;

  

public class JacksonDemo {

  public static void main(String[] args) throws ParseException, IOException {

    User user = new User();

    user.setName("小民"); 

    user.setEmail("xiaomin@sina.com");

    user.setAge(20);

      

    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");

    user.setBirthday(dateformat.parse("1996-10-01"));    

      

    /**

     * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。

     * ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。

     * writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。

     * writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。

     * writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。

     * writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。

     */

    ObjectMapper mapper = new ObjectMapper();

      

    //User类转JSON

    //输出结果:{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}

    String json = mapper.writeValueAsString(user);

    System.out.println(json);

      

    //Java集合转JSON

    //输出结果:[{"name":"小民","age":20,"birthday":844099200000,"email":"xiaomin@sina.com"}]

    List<User> users = new ArrayList<User>();

    users.add(user);

    String jsonlist = mapper.writeValueAsString(users);

    System.out.println(jsonlist);

  }

}

登入後複製

三、JSON轉Java類[JSON反序列化]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import java.io.IOException;

import java.text.ParseException;

import com.fasterxml.jackson.databind.ObjectMapper;

  

public class JacksonDemo {

  public static void main(String[] args) throws ParseException, IOException {

    String json = "{\"name\":\"小民\",\"age\":20,\"birthday\":844099200000,\"email\":\"xiaomin@sina.com\"}";

      

    /**

     * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。

     */

    ObjectMapper mapper = new ObjectMapper();

    User user = mapper.readValue(json, User.class);

    System.out.println(user);

  }

}

登入後複製

四、JJackson

進行控制,以下介紹一些常用的註解。

@JsonIgnore 此註解用於屬性上,作用是進行JSON操作時忽略該屬性。

@JsonFormat 此註解用於屬性上,作用是把Date類型直接轉換為想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。


@JsonProperty 此註解用於屬性上,作用是把該屬性的名稱序列化為另外一個名稱,如把trueName屬性序列化為name


@JsonProperty("name")。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

import java.util.Date;

import com.fasterxml.jackson.annotation.*;

  

public class User {

  private String name;

    

  //不JSON序列化年龄属性

  @JsonIgnore 

  private Integer age;

    

  //格式化日期属性

  @JsonFormat(pattern = "yyyy年MM月dd日")

  private Date birthday;

    

  //序列化email属性为mail

  @JsonProperty("mail")

  private String email;

    

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

    

  public Integer getAge() {

    return age;

  }

  public void setAge(Integer age) {

    this.age = age;

  }

    

  public Date getBirthday() {

    return birthday;

  }

  public void setBirthday(Date birthday) {

    this.birthday = birthday;

  }

    

  public String getEmail() {

    return email;

  }

  public void setEmail(String email) {

    this.email = email;

  }

}

登入後複製


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import java.io.IOException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

  

import com.fasterxml.jackson.databind.ObjectMapper;

  

public class JacksonDemo {

  

  public static void main(String[] args) throws ParseException, IOException {

    User user = new User();

    user.setName("小民"); 

    user.setEmail("xiaomin@sina.com");

    user.setAge(20);

      

    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");

    user.setBirthday(dateformat.parse("1996-10-01"));    

      

    ObjectMapper mapper = new ObjectMapper();

    String json = mapper.writeValueAsString(user);

    System.out.println(json);

    //输出结果:{"name":"小民","birthday":"1996年09月30日","mail":"xiaomin@sina.com"}

  }

}

登入後複製

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

更多Java下利用Jackson進行JSON解析和序列化範例相關文章請關注PHP中文網!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板