JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。由于它的便捷性可以实现对象的传输。本篇重点说明java解析JSON的几种方式。
Java官方并没有出台JSON的解析工具,市面上主流的有以下两种:
- GSON:谷歌出品,稳定好用
- FastJson:阿里研发,国内主流
接下来分别介绍这两种JSON解析工具如何实现JSON和对象的互转。
先new一个Gson对象,调用它的toJson()方法,并传入对象。
//1. 创建对象
Book b = new Book("1", "金苹果", "种苹果");
//2. 转换成Json字符串
String s = new Gson().toJson(b);
System.out.println(s);
2. 将JSON转回对象
仍是new Gson对象,调用fromJson()方法,参数1:JSON字符串,参数2:对象的类。
//1. 创建Json字符串
String s = "{\"id\":\"1\",\"name\":\"金苹果\",\"info\":\"种苹果\"}";
//2. 转换成对象
Book book = new Gson().fromJson(s, Book.class);
System.out.println(book.getName());
3.将JSON转换成集合
如果暂时没有想转的类,可以先将JSON转成集合。
还是调用fromJson()方法,参数1:JSON字符串,参数2:集合类。
有一个注意点是JSON中有数组的话实际返回的类并不是String
//{"id":"1","name":"金苹果","info":"种苹果","page":["锄禾日当午","汗滴禾下土"]}
//1. 创建Json字符串
String s = "{\"id\":\"1\",\"name\":\"金苹果\",\"info\":\"种苹果\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\"]}";
//2. 转换成map集合
HashMap hashMap = new Gson().fromJson(s, HashMap.class);
System.out.println(hashMap.get("page").getClass());
//3. 实际返回的是ArrayList,所以把它转换成List
List page = (List) hashMap.get("page");
System.out.println(page.get(1));
FastJson不用new对象,直接调用静态方法toJSONString(),传入对象。
//1. 创建对象
Book b = new Book("1", "金苹果", "种苹果");
//2. 转换成Json字符串
String s = JSON.toJSONString(b);
System.out.println(s);
2. 将JSON转回对象
调用静态方法parseObject(),参数1:JSON字符串,参数2:对象的类。
//1. 创建Json字符串
String s = "{\"id\":\"1\",\"name\":\"金苹果\",\"info\":\"种苹果\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\"]}";
//2. 转化成对象
Book b = JSON.parseObject(s, Book.class);
System.out.println(b.getName());
3.将JSON转换成集合
FastJson也能将JSON转换成集合。
调用方法parseObject(),参数1:JSON字符串,参数2:List中元素的类。
//1. 创建数组字符串
String s = "[\"床前明月光\",\"疑是地上霜\",\"举头望明月\",\"低头思故乡\"]";
//2. 转化成集合
List strings = JSON.parseArray(s, String.class);
System.out.println(strings.get(1));