gson的简单使用—json数据和对应类之间的互相转换
最近项目上用到json数据,简单处理json串和生成json串的功能,自己学习了一下,做了一个简单的入门步骤。
使用的是Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化。
Gson很熟练的大大就不需要看了…
所需jar包maven引用
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
观察json串数据
{"token":"123123123","user":[{"id":"123456","loginname":"zhangsan","name":"张三","no":"01012345678","email":"[email protected]","phone":"77887788","mobile":"12312341234","useable":"1","office":"0101","levelName":"领导"}]}
拿到json数据可以先去这里校验json字符串的正确性在线JSON校验传送门
还有展开功能方便观察
{
//字符串对象
"token": "123123123",
//user其实是一个对象数组[{user1,user2...}]
"user": [{
"id": "123456",
"loginname": "zhangsan",
"name": "张三",
"no": "01012345678",
"email": "[email protected]",
"phone": "77887788",
"mobile": "12312341234",
"useable": "1",
"office": "0101",
"levelName": "领导"
}]
}
构建实体类
因为是结构简单的json字符串,可以比较迅速的写出实体类
//承载请求的json数据
public class UserRequestData {
private String token;
//我们观察发现user其实应该是一个对象数组
//数组中存放的才是一个一个的用户对象
private Object[] user;
//Getter and Setter
//Constructor
}
//内部类比较直观
class User{
private String id;
private String loginname;
//省略
}
fromJson()
将json字符串解析为对应的类
public static void main(String[] args) {
String data = "{\"token\":\"123123123\",\"user\":[{\"id\":\"123456\",\"loginname\":\"zhangsan\",\"name\":\"张三\",\"no\":\"01012345678\",\"email\":\"[email protected]\",\"phone\":\"77887788\",\"mobile\":\"12312341234\",\"useable\":\"1\",\"office\":\"0101\",\"levelName\":\"领导\"}]}";
// 利用gson封装好的方法解析字符串,得到一个对象
UserRequestData userRequestData = gson.fromJson(data,UserRequestData.class);
}
toJson()
用实体类产生json字符串
public static void main(String[] args) {
String token = "123123123";
User u = new User("123456","zhangsan","张三","01012345678","[email protected]","77887788","12312341234","1","0101","领导");
Object[] users = new Object[1];
users[0] = u;
UserRequestData userRequestData = new UserRequestData(token,users);
String jsonStr = gson.toJson(userRequestData);
System.out.println(jsonStr);
}
趁热打铁再构建一个实体类
- json数据
{"token":"12345","officeList":[{"code":"001","name":"鹰酱局","shortName":"白头鹰联邦调查局","childList":[{"code":"001001","name":"局领导","shortName":"局领导"},{"code":"001002","name":"行动处","shortName":"行动处"},{"code":"001003","name":"物资处","shortName":"物资处"}]},{"code":"001002","name":"行动处","shortName":"行动处","childList":[{"code":"001002001","name":"处领导","shortName":"处领导"},{"code":"001002002","name":"行动A组","shortName":"行动A组"},{"code":"001002002","name":"行动B组","shortName":"行动B组"}]},{"code":"001003","name":"物资处","shortName":"物资处","childList":[{"code":"001002001","name":"处领导","shortName":"处领导"},{"code":"001002002","name":"物资A组","shortName":"物资A组"},{"code":"001002002","name":"物资B组","shortName":"物资B组"}]}]}
- 展开方便观察
仔细观察数据的结构,依次分析每一层的内容,由此确定实体类的结构和属性
{
"token": "12345",
"officeList": [
{
"code": "001",
"name": "鹰酱局",
"shortName": "白头鹰联邦调查局",
"childList": [
{
"code": "001001",
"name": "局领导",
"shortName": "局领导"
},
{
"code": "001002",
"name": "行动处",
"shortName": "行动处"
},
{
"code": "001003",
"name": "物资处",
"shortName": "物资处"
}
]
},
{
"code": "001002",
"name": "行动处",
"shortName": "行动处",
"childList": [
{
"code": "001002001",
"name": "处领导",
"shortName": "处领导"
},
{
"code": "001002002",
"name": "行动A组",
"shortName": "行动A组"
},
{
"code": "001002002",
"name": "行动B组",
"shortName": "行动B组"
}
]
},
{
"code": "001003",
"name": "物资处",
"shortName": "物资处",
"childList": [
{
"code": "001002001",
"name": "处领导",
"shortName": "处领导"
},
{
"code": "001002002",
"name": "物资A组",
"shortName": "物资A组"
},
{
"code": "001002002",
"name": "物资B组",
"shortName": "物资B组"
}
]
}
]
}
- 实体类
public class GroupReuqestData {
private String token;
private Object[] officeList;
//Getter and Setter
//Constructor
}
class Org{
private String code;
private String name;
private String shortName;
private Object[] childList;
//Getter and Setter
//Constructor
}
class Group{
private String code;
private String name;
private String shortName;
//Getter and Setter
//Constructor
}
- fromJson()查看结果
总结
现在回想刚开始用的这个jar包处理简单json串还行
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
遇到复杂一点的json串就没有这个gson.jar方便了。
import com.google.gson.Gson;