首先我们学东西最主要是希望有朝一日能用上它,json的解析是后端工程师的必备技能,工作中十分常见,那我们带着问题去学习,json的设计初衷是为了啥?
1.Json解析是干什么的?
答:把Java中的对象转换为Json格式的字符串,或者把Json格式的字符串转换成Java的对象的
2.为什么要对象,字符串两者之间转化?
答:给一个Java对象类给普通用户看,可能看不明白,但是如果以这样一种方式去操作:键值对,{姓名:张三 年龄:18 }这样的一种方式呈现给用户就可以看得明白了。当然我们也习惯了看这种方式
3.怎么转换?
第一步:导入Jar文件
Json解析的jar包有很多,最常见的就是2个。国内阿里的fastjson,这个漏洞好像有点多,但是在国内比较流行。另一个就是谷歌的Gson,个人比较喜欢的一个jar包。详细倒包过程见我的另一篇文章----IDEA倒包
第二步:Gson将对象转换为Json字符串:
在这里插入代码片
public static void main(String[] args) {
Gson gson = new Gson();
Book b = new Book("100","西游记","师徒四人西行一路降妖除魔,到西天灵山取经的故事");
String s = gson.toJson(b);
System.out.println(s);
}
得到 json数据如下图:
第三步:json 格式的字符串转换为对象,
1.准备好json格式的字符串数据,调用gson.fromJson(json数据,转换的类名.class)方法即可
在这里插入代码片
public static void main(String[] args) {
Gson gson = new Gson();
Book book = gson.fromJson("{\"id\":\"100\",\"name\":\"西游记\",\"info\":\"师徒四人西行一路降妖除魔,到西天灵山取经的故事\"}", Book.class);
System.out.println(book.getId());//图书有id号,并且有get,set方法
}
得到书的 id号是:
这样就完成了json数据与java对象之间的转换了
进阶学习:没有对象的时候 json 可以转HashMap,其实json跟map还是挺像的,都是一个键值对,所以转起来也是十分方便。
在这里插入代码片
public static void main(String[] args) {
Gson gson = new Gson();
HashMap hashMap = gson.fromJson("{\"id\":\"100\",\"name\":\"西游记\",\"info\":\"师徒四人西行一路降妖除魔,到西天灵山取经的故事\"}",HashMap.class);
System.out.println(hashMap.get("info"));
}
这样就得到一个HashMap对象,从而可以获取键或者值了。
结果:
另外如果json格式的数据当中有例如这样的,里面有像page这样的看似数组的json数据,其实它不是数组,是ArrayList。
{"id":"100","name":"金苹果","info":"种植苹果真辛苦","page":["锄禾日当午","汗滴禾下土","谁知盘中餐","粒粒皆辛苦"]}
在这里插入代码片 public static void main(String[] args) {
Gson gson = new Gson();//
HashMap hashMap = gson.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]}",HashMap.class);
System.out.println(hashMap.get("page").getClass());
}
得到的结果截图:
也可以将其转换为List,然后使用
List list = (List) hashMap.get("page");
System.out.println(list.get(1));
得到:汗滴禾下土