用於處理JSON數據的工具有很多,搜的時候看到了Gson,所以就選擇了這個,就是這麼草率。
但是昨天要解析下面的json字符串,說白了我只是想要把data字段裏面的東西都轉成java對象,結果在網上搜了半天,找到的博客不是解析這種{"name":"xxx", "age":"19"}
類型的,就是解析[{"name":"xxx", "age":"19"}]
這種類型的,我要這種有何用???
{
"data": [
{
"createTime": "2018-11-05 14:12:39",
"groupDesc": "組1",
"groupKey": "group-test",
"id": "c14da77a-600d-4773-a94e-2fc337e72414",
"status": 1,
"systemKey": "AA",
"updateTime": "2018-11-05 14:12:38"
}
],
"message": "success",
"status": "0"
}
不過,經過我堅持不懈的努力,最終還是解決了這個問題。Maven項目,直接在pom中添加依賴:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
以下代碼都是可以直接運行的,此處使用了unit的Test,可以在pom裏面添加unit依賴:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
下面是測試代碼,詳細說明都在註釋裏面:
@Test
public void gsonTest() {
String simpleStr = "{\"name\":\"Sunny\",\"age\":19}";
String arraySimpleStr = "[{\"name\":\"Sunny\",\"age\":19}]";
String response = "{\"data\":[{" +
" \"createTime\": \"2018-11-05 14:12:39\"," +
"\"groupDesc\": \"組1\"," +
"\"groupKey\": \"group-test\"," +
"\"id\": \"c14da77a-600d-4773-a94e-2fc337e72414\"," +
"\"status\": 1," +
"\"systemKey\": \"AA\"," +
"\"updateTime\": \"2018-11-05 14:12:38\"" +
"}]," +
"\"message\": \"success\"," +
"\"status\": \"0\"" + "}";
Gson gson = new Gson();
// 調用fromJson方法直接對json字符串進行轉換,傳入json字符串,指定要轉換成哪種類型的對象
SimplePojo simplePojo = gson.fromJson(simpleStr, SimplePojo.class);
System.out.println("SimpleStr result : " + simplePojo.toString());
// 對於解析數據有兩種方式,此處因爲數據裏只有一條數據,就不遍歷輸出了
// 1. 指定轉換後的對象爲數組的形式SimplePojo[].class
SimplePojo[] arraySimplePojos = gson.fromJson(arraySimpleStr, SimplePojo[].class);
System.out.println("arraySimpleStr result : " + arraySimplePojos[0].toString());
// 2. 通過解析器直接轉換成數組
// 定義一個解析器
JsonParser parser = new JsonParser();
JsonArray arraySimplePojos2 = parser.parse(arraySimpleStr).getAsJsonArray();
System.out.println("arraySimpleStr result2 : " + arraySimplePojos2.get(0).toString());
// 解析複雜類型的json字符串, list用於存放解析data數組生成的對象
ArrayList<GroupResponse> list = new ArrayList<GroupResponse>();
// 將數據先解析成JsonObject類型的對象
JsonObject object = parser.parse(response).getAsJsonObject();
// 通過字段名稱獲取到指定字段的數據, 此處可以看出data字段裏是一個數組, 所以返回的是JsonArray類型的
JsonArray array = object.get("data").getAsJsonArray();
for (JsonElement element : array) {
// 遍歷取出數組裏的每個element, 此處就跟把一個把簡單json字符串轉成對象一樣了
GroupResponse groupResponse = gson.fromJson(element, GroupResponse.class);
list.add(groupResponse);
}
System.out.println("Response result : " + list.toString());
}
輸出結果:
SimpleStr result : SimplePojo{name='Sunny', age=19}
arraySimpleStr result : SimplePojo{name='Sunny', age=19}
arraySimpleStr result2 : {"name":"Sunny","age":19}
Response result : [GroupResponse{createTime='2018-11-05 14:12:39', groupDesc='組1', groupKey='group-test', id='c14da77a-600d-4773-a94e-2fc337e72414', status=1, systemKey='AA', updateTime='2018-11-05 14:12:38'}]
關於Gson的使用,先寫這麼多吧,裏面還有很多強大的功能,項目比較緊張,其他功能後面再補充吧。
Emmm… 似乎還需要貼出來pojo類?
/**
* @author Peerless galaxy.
* @date 2018/11/6 10:59
*/
public class SimplePojo {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "SimplePojo{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
/**
* @author Peerless galaxy.
* @date 2018/11/6 11:07
*/
public class GroupResponse {
String createTime;
String groupDesc;
String groupKey;
String id;
int status;
String systemKey;
String updateTime;
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getGroupDesc() {
return groupDesc;
}
public void setGroupDesc(String groupDesc) {
this.groupDesc = groupDesc;
}
public String getGroupKey() {
return groupKey;
}
public void setGroupKey(String groupKey) {
this.groupKey = groupKey;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getSystemKey() {
return systemKey;
}
public void setSystemKey(String systemKey) {
this.systemKey = systemKey;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "GroupResponse{" +
"createTime='" + createTime + '\'' +
", groupDesc='" + groupDesc + '\'' +
", groupKey='" + groupKey + '\'' +
", id='" + id + '\'' +
", status=" + status +
", systemKey='" + systemKey + '\'' +
", updateTime='" + updateTime + '\'' +
'}';
}
}