json概述 - Jackson的使用,bean对象(list列表)与json数据之间相互转换(序列化和反序列化)

1. json字符串

  JSON( JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。

1.1 特点

  1. 完全独立于编程语言的文本格式来存储和表示数据。

  2. 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

  3. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
    (son数据的键(key)必须是字符串,值没有限定)

1.2 json的格式语法

  1. 在JavaScript中json数据可以直接被识别
  2. 在java代码中,数据和json可以互相转换

2. json转换工具

  json的转换工具是通过java封装好的一些jar包,直接将java对象或集合转换成json格式的字符串。

2.1 json的常用转换工具

在这里插入图片描述

2.2 Jackson的使用

  因为他是免费开源的json转换工具,而且也是springmvc的默认json转换工具

2.2.1 Jaskson的组成

在这里插入图片描述

  • jackson-annotations:是Jaskson的注解包,提供标准注解功能
  • jackson-core:是核心包,提供了基于"流模式"解析的相关API,包括JsonPaser和JsonGenerator
  • jackson-databind:是数据绑定包,提供基于"对象绑定"解析的相关API(ObjectMapper)和"树模型"解析的相关API(JsonNode)

2.2.2 Jackson的ObjectMapper类【***】

  ObjectMapper类是Jackson库的主要类,它的主要功能是:

  1. 实现java对象向json数据格式的转换(被称为序列化)
  2. 实现json数据格式向java对象的转换(被称为反序列化)
  • 可以使用ObjectMapper类的readValue 方法将JSON内容反序列化为Java对象。
  • 可以使用ObjectMapper类的writeValue 方法将Java对象序列化为JSON数据格式。

2.3 案例

  1. 导入jar包 - 在WEB-INF目录下导入jar包,并将它们加入Library
    在这里插入图片描述
  2. 创建User对象(java封装类属性一般是private,所以需要有get/set方法,不然Jackson读取不到)
public class User {
    
    
    private String name;
    private int age;
    private String sex;
    private String address;
	//省略构造方法、getter/setter方法
}

2.3.1 编写测试类,测试ObjectMapper类的writeValueAsString()方法,将javabean转换为json数据格式

//测试对象序列化,将对象转换为json数据格式
public class TestObjectMapper {
    
    
    //测试单个对象user转换为json数据格式
    @Test
    public void test01() throws JsonProcessingException {
    
    
        //1、创建对象user
        User user = new User("我是GF_浪夏一学 - 单个对象",21,"男","湖南");
        //2、writeValueAsString()方法,将一个user对象转成json字符串
        String userJson = new ObjectMapper().writeValueAsString(user);//将javabean转换为json数据格式
        System.out.println(userJson);
    }

    //将一个对象数组转换为json数据格式
    @Test
    public void test02() throws JsonProcessingException {
    
    
        //1、创建对象,加入集合中
        User user1 = new User("我是集合user1",21,"男","湖南");
        User user2 = new User("我是集合user2",20,"女","北京");

        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        //2、writeValueAsString()方法,将一个对象数组转换为json数据格式
        String userListJson = new ObjectMapper().writeValueAsString(userList);
        System.out.println(userListJson);
    }

    //将一个Map集合转成json字符串
    @Test
    public void test03() throws JsonProcessingException {
    
    
        //1:创建对象
        User user1 = new User("我是map集合的user1对象",21,"男","湖南");
        User user2 = new User("我是map集合的user2对象",20,"女","北京");
        //存入map
        Map<String,User> map  = new HashMap<>();
        map.put("user1",user1);
        map.put("user2",user2);
        //2、writeValueAsString()方法,将一个Map集合转成json字符串
        String json= new ObjectMapper().writeValueAsString(map);
        System.out.println(json);
    }
}

运行结果:

在这里插入图片描述

2.3.2. 测试ObjectMapper类的readValue 方法,将json数据格式转化为javabean对象

public class TestObjectMapper {
    
    

    //将一个json数据转换为user对象
    @Test
    public void test04() throws IOException {
    
    
        //1:创建一个json对象
        String jsonData = "{\"name\":\"我是GF_浪夏一学\",\"age\":21,\"sex\":\"男\",\"address\":\"湖南\"}";
        //2、writeValueAsString()方法,将一个Map集合转成json字符串
        User user = new ObjectMapper().readValue(jsonData, User.class);
        System.out.println(user);//会输出user的toString()方法
    }
}

运行结果:
在这里插入图片描述

将json数据格式转化为列表list
//测试json数据转集合list
    @Test
    public void test05() throws IOException {
    
    
        String json="[{\"name\":\"我是GF_浪夏一学\",\"age\":21,\"sex\":\"男\",\"address\":\"湖南\"},{\"name\":\"java小皮孩\",\"age\":21,\"sex\":\"男\",\"address\":\"深圳\"}]";

        //
        ObjectMapper objectMapper = new ObjectMapper();

        List<User> userList = objectMapper.readValue(json,new TypeReference<List<User>>(){
    
    });//将json转成对象   参1 json数据  参2 new TypeReference<>(){}
        System.out.println(userList);
    }

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40542534/article/details/108669100