JSON

JSON

​ JSON 是一种轻量级易于解析的数据格式,它按照 js 的对象和数组的字面量格式来书写。

JSON数据类型和格式

  • 基本类型

    {
        "name": " 张三 ",
        "age": 18,
        "sex": true
    }
    
  • 数组类型

    [
        {
            "name": " 张三 ",
            "age": 18,
            "sex": true
        },
        {
            "name": " 李四 ",
            "age": 19,
            "sex": false
        }
    ]
    
  • 对象嵌套

    {
        "name": "teacher",
        "computer": {
            "CPU": "intel7",
            "disk": "512G"
        },
        "students": [
            {
                "name": " 张三 ",
                "age": 18,
                "sex": true
            },
            {
                "name": " 李四 ",
                "age": 19,
                "sex": false
            }
        ]
    }
    

构建结构

  • 对象类型
  • 数组类型

具体形式

  • Json 以 key-value 的形式存储数据

  • Key 的取值 为 String 类型

  • Value 的取值 为 String,boolean,Number,数组,Object,null

  • Json串以 { 开始,以 } 结尾

  • Json 串中数组是以 [ 开始,以 ] 结尾

  • Json 串中Object是以 { 开始,以 } 结尾

  • 具体如下:

    • 对象是一个无序的“名称/值”对集合。一个对象以”{”开始,“}”结束。每个名称后跟一个“:”;“名称/值 ”对之间使用“,”分隔。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bA2YeRrv-1571923936430)(D:\SHSXT\中级班\XML&JSON\video\1571919546170.png)]

    • 数组是值的有序集合。一个数组以“[”开始,“]”结束。各值间使用“,”分隔。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7UDTGQd0-1571923936432)(D:\SHSXT\中级班\XML&JSON\video\1571919564712.png)]

    • 值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNmDnBQj-1571923936433)(D:\SHSXT\中级班\XML&JSON\video\1571919576233.png)]

JSON解析

GSON

  • 将Java对象转换成JSON格式的字符串

    • 方法:toJson(obj);

      @Test
      public void testJavaToJson() {		
          // 得到gson对象
          Gson gson = new Gson();		
      
          // 定义Java对象
          User user = new User(1,"张三","123321",18);
          // 通过gson对象解析Java对象,返回字符串(json格式的字符串)
          String json = gson.toJson(user);
          System.out.println(json);		
      
          // 定义List
          List<String> list = new ArrayList<>();
          list.add("admin");
          list.add("zhangsan");
          list.add("hahaha");
          String json2 = gson.toJson(list);
          System.out.println(json2);		
      
          List<User> userList = new ArrayList<>();
          User user2 = new User(2,"lisi","11111",18);
          User user3 = new User(3,"admin","234567",19);
          userList.add(user);
          userList.add(user2);
          userList.add(user3);
          String json3 = gson.toJson(userList);
          System.out.println(json3);
      
          // Map
          Map<String,Object> map = new HashMap<>();
          map.put("name", "Lisa");
          map.put("sex", "女");
          map.put("user", user);
          map.put("userList", userList);
          String json4 = gson.toJson(map);
          System.out.println(json4);
      }
      
  • 将JSON格式的字符串转换成指定Java对象

    • 方法:fromJson(json, Class.class);

      @Test
      public void testJsonToJava() {
          String json = "{\"userId\":1,\"uname\":\"张三\",\"upwd\":\"123321\",\"uage\":18}";
          String json2 = "[\"admin\",\"zhangsan\",\"hahaha\"]";
          String json3 = "[{\"userId\":1,\"uname\":\"张三\",\"upwd\":\"123321\",\"uage\":18},{\"userId\":2,\"uname\":\"lisi\",\"upwd\":\"11111\",\"uage\":18},{\"userId\":3,\"uname\":\"admin\",\"upwd\":\"234567\",\"uage\":19}]";
      
          // 转换成JavaBean
          User user = new Gson().fromJson(json, User.class);
          System.out.println(user.getUname());
      
          // 转换成集合
          List<String> list = new Gson().fromJson(json2, new TypeToken<List<String>>(){}.getType());
          System.out.println(list.get(0));
      
          List<User> userList = new Gson().fromJson(json3, new TypeToken<List<User>>(){}.getType());
          System.out.println(userList.get(2).getUname());
      }
      

节点解析

  • 解析步骤

    1. 获取解析器
    2. 解析json字符串,返回jsonElement对象
    3. 通过文档类型,将jsonElement对象转换成具体的json数据类型
    4. 解析节点 根据节点对应的类型解析数据
    @Test
    public void testJson() {
        String json = "{\"flag\": true,\"data\":{\"uage\":18,\"uname\":\"张三\",\"upwd\":\"123321\",\"userId\":1}}";
    
        // 1、获取解析器
        JsonParser parser = new JsonParser();
        // 2、解析json字符串,返回jsonElement对象
        JsonElement document = parser.parse(json);
        // 3、通过文档类型,将jsonElement对象转换成具体的json数据类型
        JsonObject root = document.getAsJsonObject();
    
        // 解析节点
        // 布尔类型   基本数据类型
        JsonPrimitive primitive = root.getAsJsonPrimitive("flag");
        // 将基本数据类型转换为具体的数据类型
        boolean flag = primitive.getAsBoolean();
        System.out.println(flag);	
    
        // 对象类型   JsonObject
        JsonObject object = root.getAsJsonObject("data");
        // 将JsonObject对象转换成User对象
        User user = new Gson().fromJson(object, User.class);
    }
    

FastJson

  • 将Java对象转换成JSON格式的字符串

    • 方法:toJSONString(obj);

      @Test
      public void testJavaToJson() {	
          // 定义Java对象
          User user = new User(1,"张三","123321",18);
          String json1 = JSON.toJSONString(user);
          System.out.println(json1);
      
          // 定义List
          List<String> list = new ArrayList<>();
          list.add("admin");
          list.add("zhangsan");
          list.add("hahaha");
          String json2= JSON.toJSONString(list);
          System.out.println(json2);
      
          List<User> userList = new ArrayList<>();
          User user2 = new User(2,"lisi","11111",18);
          User user3 = new User(3,"admin","234567",19);
          userList.add(user);
          userList.add(user2);
          userList.add(user3);
          String json3 = JSON.toJSONString(userList);
          System.out.println(json3);
      
          // Map
          Map<String,Object> map = new HashMap<>();
          map.put("name", "Lisa");
          map.put("sex", "女");
          map.put("user", user);
          map.put("userList", userList);
          String json4 = JSON.toJSONString(map);
          System.out.println(json4);			
      }
      
  • 将JSON格式的字符串转换成指定Java对象

    • 方法:

      • parseObject(json, Class.class);
      • parseArray(json, Class.class);
      @Test
      public void testJsonToJava() {
          String json = "{\"userId\":1,\"uname\":\"张三\",\"upwd\":\"123321\",\"uage\":18}";
          String json2 = "[\"admin\",\"zhangsan\",\"hahaha\"]";
          String json3 = "[{\"userId\":1,\"uname\":\"张三\",\"upwd\":\"123321\",\"uage\":18},{\"userId\":2,\"uname\":\"lisi\",\"upwd\":\"11111\",\"uage\":18},{\"userId\":3,\"uname\":\"admin\",\"upwd\":\"234567\",\"uage\":19}]";
      
          User user = JSON.parseObject(json,User.class);
          List<String> list = JSON.parseArray(json2,String.class);
          List<User> userList = JSON.parseArray(json3,User.class);
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值