Java对象与JSON数据的相互转换

àì夳堔傛蜴生んèń 2022-12-26 04:51 221阅读 0赞

Java对象与JSON数据的相互转换

在这里插入图片描述

文章目录

  • Java对象与JSON数据的相互转换
  • 一、Java对象转JSON
    • 基本使用
    • 注解使用
  • 二、JSON转为Java对象
    • 使用步骤

一、Java对象转JSON

一般Java对象与JSON的相互转换都使用JSON解析器来完成。 常见的JSON解析器有:Jsonlib,Gson,fastjson,jackson。 这里我们使用的是jackson解析器。

基本使用

使用步骤:

  1. 导入jackson的相关jar包
  2. 创建Jackson核心对象 ObjectMapper
  3. 调用ObjectMapper的相关方法进行转换

创建Java对象用于测试:

  1. public class Person {
  2. private String name;
  3. private int age;
  4. private String gender;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public int getAge() {
  12. return age;
  13. }
  14. public void setAge(int age) {
  15. this.age = age;
  16. }
  17. public String getGender() {
  18. return gender;
  19. }
  20. public void setGender(String gender) {
  21. this.gender = gender;
  22. }
  23. @Override
  24. public String toString() {
  25. return "Person{" +
  26. "name='" + name + '\'' +
  27. ", age=" + age +
  28. ", gender='" + gender + '\'' +
  29. '}';
  30. }
  31. }

转换Java对象为JSON:

  1. @Test
  2. public void test1() throws JsonProcessingException {
  3. //1.创建Person对象
  4. Person p = new Person();
  5. p.setName("张三");
  6. p.setAge(18);
  7. p.setGender("男");
  8. //2.创建jackson的核心对象 ObjectMApper
  9. ObjectMapper mapper = new ObjectMapper();
  10. //3.转换
  11. String json = mapper.writeValueAsString(p);
  12. System.out.println(json);
  13. }

效果如下:
在这里插入图片描述

转换方法:
writeValueAsString(obj):将对象转为json字符串(如上所述)
writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
事例如下:

  1. //writeValue,将数据写到桌面
  2. mapper.writeValue(new File("/Users/XXX/Desktop/a.txt"),p);

效果如下:
在这里插入图片描述

  1. //writeValue.将数据关联到Writer中
  2. mapper.writeValue(new FileWriter("/Users/xxx/Desktop/b.txt"),p);

效果如下:
在这里插入图片描述

注解使用

Java对象转JSON时,有些情况需要用到注解辅助格式的转换,下面是最常见的两种注解

**1. @JsonIgnore:排除属性。

  1. @JsonFormat:属性值得格式化
    格式为: @JsonFormat(pattern = “yyyy-MM-dd”)**

在上面的Java对象中添加一个属性birthday,并添加get,set方法:

  1. import java.util.Date;
  2. public class Person {
  3. private String name;
  4. private int age;
  5. private String gender;
  6. private Date birthday;
  7. public Date getBirthday() {
  8. return birthday;
  9. }
  10. public void setBirthday(Date birthday) {
  11. this.birthday = birthday;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. public String getGender() {
  26. return gender;
  27. }
  28. public void setGender(String gender) {
  29. this.gender = gender;
  30. }
  31. @Override
  32. public String toString() {
  33. return "Person{" +
  34. "name='" + name + '\'' +
  35. ", age=" + age +
  36. ", gender='" + gender + '\'' +
  37. '}';
  38. }
  39. }

再使用上述方法转换JSON时:

  1. @Test
  2. public void test2() throws Exception {
  3. //1.创建Person对象
  4. Person p = new Person();
  5. p.setName("张三");
  6. p.setAge(18);
  7. p.setGender("男");
  8. p.setBirthday(new Date());
  9. //2.创建jackson的核心对象 ObjectMApper
  10. ObjectMapper mapper = new ObjectMapper();
  11. //3.转换
  12. String json = mapper.writeValueAsString(p);
  13. System.out.println(json);
  14. }

结果如下:
在这里插入图片描述

日期格式表现为时间毫秒值,所以需要使用注解进行转换。

在属性或者get方法上面添加注解@JsonIgnore;则会忽略该属性。

  1. @JsonIgnore
  2. private Date birthday;

效果
在这里插入图片描述
在属性或者get方法上面添加注解@JsonFormat;则会转为特定的格式:

  1. @JsonFormat(pattern = "yyyy-MM-dd")
  2. private Date birthday;

在这里插入图片描述

二、JSON转为Java对象

使用步骤

**1. 导入jackson的相关jar包

  1. 创建Jackson核心对象 ObjectMapper
  2. 调用ObjectMapper的相关方法进行转换
    * readValue(json字符串数据,Class)**

    //演示 JSON字符串转为Java对象

    1. @Test
    2. public void test5() throws Exception {
    3. //1.初始化JSON字符串
    4. String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
    5. //2.创建ObjectMapper对象
    6. ObjectMapper mapper = new ObjectMapper();
    7. //3.转换为Java对象 Person对象
    8. Person person = mapper.readValue(json, Person.class);
    9. System.out.println(person);
    10. }

效果如下:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,221人围观)

还没有评论,来说两句吧...

相关阅读