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()); }
-
节点解析
-
解析步骤
- 获取解析器
- 解析json字符串,返回jsonElement对象
- 通过文档类型,将jsonElement对象转换成具体的json数据类型
- 解析节点 根据节点对应的类型解析数据
@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); }
-