JSON解析
JSON的对象格式
一个对象, 由一个大括号表示.
括号中描述对象的属性 . 通过键值对来描述对象的属性
(可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:
- 键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
- 键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
- 键值对的值, 可以是JS中的任意类型的数据
//例子,此JSON中存储了一个对象,对象中有属性name和info,以及他们所对应的值
{
"name":"金苹果",
"info":"种苹果"
}
JSON的数组格式
JSON的对象格式和数组格式可以相互嵌套
即对象格式中的某一个值可以使用数组的形式来存储,而数组中的某一个值也可以是对象
格式: [元素1,元素2…]
//例子
{
"name":"包子",
"age":"18",
//朋友属性对应的值是一个数组,数组中又包含了对象
"pengyou":["张三","李四","王二","麻子",{
"name":"野马老师",
"info":"像匹野马一样狂奔在技术钻研的道路上"
}],
//对象的属性对应的值也可以是一个对象
"heihei":{
"name":"大长刀",
"length":"40m"
}
}
总结:
- 数组中可以包含对象(即数组中的某一个元素为一个对象)
- 对象中可以包含数组(即属性名对应的值为数组)
Java与JSON之间的相互转换
Java和JSON之间相互转化的形式,我们常见的又两种,分别是谷歌的GSON和阿里巴巴的FastJson
GSON
-
将对象转换程JSON字符串
步骤:
-
引入JAR包 (引入GSON的jar包)
-
在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJson(要转换的对象);
//1.创建Gson对象 Gson g = new Gson(); //2. 转换 Book b = new Book("100","金苹果","种植苹果真辛苦"); String s = g.toJson(b); //关键语句 System.out.println(s);
-
-
将JSON字符串转换成对象或集合
步骤:
-
引入JAR包 (和上面一样,引入GSON的jar包, 转出和转入为同一个jar包)
-
在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson ( JSON字符串 , 对象类型.class);
例子1:转换成对象
-
//1.创建Gson对象
Gson g = new Gson();
//2.转换 : {"id":"100","name":"金苹果","info":"种植苹果真辛苦"}
//将需要转换的JSON语句导入后引号前会自动加上转义字符
Book b = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\"}", Book.class);
//class的属性需要和前面所接受的属性一致
System.out.println(b.getId());
例子2:转换成集合
//1.创建Gson对象
Gson g = new Gson();
//2. 转换 : {"id":"100","name":"金苹果","info":"种植苹果真辛苦","page":["锄禾日当午","汗滴禾下土","嘿嘿嘿嘿嘿"]}
//后面的class属性为HashMap,前面接收的数据类型也应该为HashMap
HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"嘿嘿嘿嘿嘿\"]}", HashMap.class);
//对象中page对应的值为一个数组,转换出来后以ArrayList的形式存储
List page = (List) data.get("page");
System.out.println(page.get(1));
FastJson
-
将对象转换成JSON字符串
步骤:
1. 引入JAR包 (引入 FastJson 的jar包)
2. 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
//例子
//1.创建要转换的对象
Book book = new Book("1002","唐诗三百首","一二三,三四五,五六七,七八九");
//2.转换
String json = JSON.toJSONString(book); //book为转换对象,传入括号中
System.out.println(json);
-
将JSON字符串转换成对象或集合
步骤:
1. 引入JAR包 (转入和转出使用同一个jar包,都是FastJson的jar包)
2. 在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject ( JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray ( JSON字符串, 类型.class);
例子1:JSON字符串转换成对象
//1.转换: {"id":"1002","info":"一二三,三四五,五六七,七八九","name":"唐诗三百首"}
Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"一二三,三四五,五六七,七八九\",\"name\":\"唐诗三百首\"}", Book.class);
System.out.println(book.getId());
//转换成对象,使用的是 JSON.parseObject 方法
例子2:JSON字符串转换成集合
//1. 转换 : ["一二三","二三四","三四五"]
List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]", String.class);
System.out.println(strings.get(1));
//转换成集合,使用的是 JSON.parseArray 方法