Day10【json字符串】***

json字符串介绍

(1)什么是json字符串
JSON( JavaScript Object Notation, JS 对象标记) 是一种轻量级的、与语言无关的数据交换格式。
(2)有什么特点?
》1 完全独立于编程语言的文本格式来存储和表示数据。
》2 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
》3 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
(3)作用:
使用ajax进行前后台数据交换
移动端与服务端的数据交换

json格式语法

注意:json的key是字符串 json的value是Object
注意:对象格式和数组格式可以互相嵌套
在这里插入图片描述
(1)json如何编写、json的解析:
json是js的原生内容,也就意味着js可以直接识别json的语法,取出json对象中的数据。
(2)Java对象与json对应关系

User  ---->json
List  ---->json
Map<String,List<User>>   ---->json
var data = {"user",[{},{},{}]}
  • 示例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        //-------------1:对象类型-----------
        //键必须是字符串。值可以是任何类型
        var jsonStr ={"username":"baoqiang","password":"123"};   //Java Bean
        alert(jsonStr.username);

        var jsonStr2 = {"user":{"username":"baoqiang2","password":"123"}};
        alert(jsonStr2.user.password);

        var jsonStr3= {"user1":{"username":"baoqiang2","password":"123"},
                        "user2":{"username":"bingbing","password":"456"}};
        alert(jsonStr3.user.password);
        alert(jsonStr3.user2.username);

        //-------------2:数组类型-----------  Java中集合
        var jsonArray1 = [{"username":"baoqiang1","password":"123"},
                           {"username":"baoqiang2","password":"123"},
                           {"username":"baoqiang3","password":"123"}];
        alert(jsonArray1[1].username);


        var jsonArray2 = {  //Map<String,List<String>>
            "baobao":[
                {"name":"小双","age":18,"addr":"扬州"},
                {"name":"建宁","age":18,"addr":"北京海淀"},
                {"name":"龙儿","age":38,"addr":"长沙"},
                {"name":"阿珂","age":17,"addr":"上海"}
            ]
        }
        alert(jsonArray2.baobao[2].addr);

        var jsonArray3 = {
            "baobao":[
                {"name":"小双","age":18,"addr":"扬州"},
                {"name":"建宁","age":18,"addr":"北京海淀"},
                {"name":"龙儿","age":38,"addr":"长沙"},
                {"name":"阿珂","age":17,"addr":"上海"}
            ],
            "haohao":[
                {"name":"楠楠","age":23,"addr":"北京"},
                {"name":"倩倩","age":18,"addr":"上海"}
            ]
        }
        alert(jsonArray3.haohao[0].addr);

    </script>
</head>
<body>

</body>
</html>

json转换工具***

(1)什么是json的转换工具
json的转换工具是通过java封装好的一些jar工具包,直接将java对象或集合转换成json格式的字符串。
(2)常见的转换工具
在这里插入图片描述

1、jackson包

》1 添加jar 或 导入依赖坐标
在这里插入图片描述

  <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.11.3</version>
  </dependency>

注:一个对象转换成json格式对象,是根据一个变量的get方法后面的名字决定。 如getNames,那么json中就是names
》2调用

编写实体类

public class User {
    private String name;
    private int age;
    private String sex;
    private String address;
    //省略get/set 构造函数
}

编写测试类

public class TestObjectMapper {
    //1:将java bean对象转为json
    @Test
    public void test01() throws JsonProcessingException {
        User user = new User("jack",11,"男","北京");
        //1.1 创建一个ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //1.2 调用方法writeValueAsString方法
        //将javabean转json  参1 javaBean
        String json = om.writeValueAsString(user);
        System.out.println(json);
        //{"name":"jack","age":11,"sex":"男","address":"北京"}
        
        //第二种:把对象解析成字符串
       	//JsonMapper mapper = new JsonMapper();
        //String userinfo = mapper.writeValueAsString(user);
    }

    //2:将List集合对象转为json
    @Test
    public void test02() throws JsonProcessingException {

        User user1 = new User("jack",11,"男","北京");
        User user2 = new User("rose",11,"女","北京");

        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);

        ObjectMapper om = new ObjectMapper();
        String json = om.writeValueAsString(list);

        System.out.println(json);
        /*
        [{"name":"jack","age":11,"sex":"男","address":"北京"},
        {"name":"rose","age":11,"sex":"女","address":"北京"}]
        */
    }

    //3:将Map集合对象转为json
    @Test
    public void test03() throws JsonProcessingException {
        User user1 = new User("jack",11,"男","北京");
        User user2 = new User("rose",11,"女","北京");

        Map<String,User> map  = new HashMap<>();
        map.put("100001",user1);
        map.put("100002",user2);

        ObjectMapper om = new ObjectMapper();
        String json= om.writeValueAsString(map);
        //4:简化版(以上两行简化成一行)
        //new ObjectMapper().writeValueAsString(user);
        System.out.println(json);
        /*
        {"100001":{"name":"jack","age":11,"sex":"男","address":"北京"},
        "100002":{"name":"rose","age":11,"sex":"女","address":"北京"}}
        */
    }
}

将json数据转成对象

public class TestObjectMapper {
    @Test
    public void test01() throws IOException {
        String json = "[{\"cid\":1,\"cname\":\"分类名1\"},{\"cid\":2,\"cname\":\"分类名2\"},{\"cid\":3,\"cname\":\"分类名3\"},{\"cid\":4,\"cname\":\"分类名4\"},{\"cid\":5,\"cname\":\"分类名5\"},{\"cid\":6,\"cname\":\"分类名6\"},{\"cid\":7,\"cname\":\"分类名7\"},{\"cid\":8,\"cname\":\"分类名8\"},{\"cid\":9,\"cname\":\"分类名9\"},{\"cid\":10,\"cname\":\"分类名10\"}]";

        ObjectMapper objectMapper = new ObjectMapper();
        //将json转成对象   参1 json数据  参2 new TypeReference<返回值类型>(){}
        List<Category> list = objectMapper.readValue(json,new TypeReference<List<Category>>(){});
		//转单个对象类型
		//Category c = objectMapper.readValue(json,User.class);
        System.out.println(list);
    }
}
	RedisUtil ru = RedisUtil.getRedisUtil();
    String userInfo = ru.get(token);
    JsonMapper mapper = new JsonMapper();
    Users u = mapper.readValue(userInfo,Users.class);

2、fastjson包

(1)导入阿里巴巴的json包

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.74</version>
    </dependency>

(2)使用servlet开发时,返回到前台示例

        JsonResponse jr = new JsonResponse();
        jr.setCode(200);
        jr.setMsg("success");
        jr.setData(data);
        resp.setContentType("text/plain;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        //转换为json对象(两个都可以)
        String str = JSONObject.toJSONString(jr);
        //String str = JSONArray.toJSONString(jr);
        out.print(str);
        out.flush();
        out.close();

3、拓展:前后台交互时,日期格式的转换

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

public class Student {
    //后台到前台的时间格式的转换,该注解如果不生效,就使用下面的吧
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    
    //注解@JsonFormat主要是 后台到前台的时间格式的转换
    @JsonFormat(pattern = "yyyy-MM-dd")
    //Jackson框架默认的时区是UTC,相比于东八区少了8小时(东+西-)。hh:12小时制,HH:24小时制。
    //@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    
    //注解@DateTimeFormat主要是 前台到后台的时间格式的转换
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
    
}

版权声明:本文为qq_43639081原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。