思考如何解析如下两个 JSON 字符串
{
"id":1,
"user":
{
"account":"admin",
"password":"123456",
"name":"John",
"age":30
},
"memo":"xxx"
}
{
"id":2,
"user":
[{
"account":"admin",
"password":"123456",
"name":"John",
"age":30
},{
"account":"user1",
"password":"654321",
"name":"Leo",
"age":22
}],
"memo":"yyy"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
这两个字符串除了“user”属性内容不同外,其他属性都是相同的,通常需要新建两个 POJO 类分别对应这两个 JSON 字符串进行解析
第一个 JSON 字符串对应的 POJO 类
class JsonObject {
private int id;
private User user;
private String memo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
第二个 JSON 字符串对应的 POJO 类
class JsonObject {
private int id;
private List<User> user;
private String memo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<User> getUser() {
return user;
}
public void setUser(List<User> user) {
this.user = user;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
如果使用泛型只需要新建如下一个 POJO 类
class JsonObject<T> {
private int id;
private T user;
private String memo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public T getUser() {
return user;
}
public void setUser(T user) {
this.user = user;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
@Override
public String toString() {
return "JsonObject [id=" + id + ", user=" + user + ", memo=" + memo + "]";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
测试代码:
@Test
public void test() {
Gson gson = new Gson();
String jsonStr1 = "{\"id\":1,"
+ "\"user\":{\"account\":\"admin\",\"password\":\"123456\",\"name\":\"John\",\"age\":30},"
+ "\"memo\":\"xxx\"}";
String jsonStr2 = "{\"id\":2,"
+ "\"user\":[{\"account\":\"admin\",\"password\":\"123456\",\"name\":\"John\",\"age\":30},"
+ "{\"account\":\"user1\",\"password\":\"654321\",\"name\":\"Leo\",\"age\":22}],"
+ "\"memo\":\"yyy\"}";
JsonObject<User> object1 = gson.fromJson(jsonStr1,
new TypeToken<JsonObject<User>>() {}.getType());
System.out.println(object1);
JsonObject<List<User>> object2 = gson.fromJson(jsonStr2,
new TypeToken<JsonObject<List<User>>>() {}.getType());
System.out.println(object2);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
运行测试结果:
当然也可以通过以下方式解析
@Test
public void test() {
Gson gson = new Gson();
String jsonStr1 = "{\"id\":1,"
+ "\"user\":{\"account\":\"admin\",\"password\":\"123456\",\"name\":\"John\",\"age\":30},"
+ "\"memo\":\"xxx\"}";
String jsonStr2 = "{\"id\":2,"
+ "\"user\":[{\"account\":\"admin\",\"password\":\"123456\",\"name\":\"John\",\"age\":30},"
+ "{\"account\":\"user1\",\"password\":\"654321\",\"name\":\"Leo\",\"age\":22}],"
+ "\"memo\":\"yyy\"}";
JsonObject<User> object1 = gson.fromJson(jsonStr1, JsonObject.class);
System.out.println(object1);
JsonObject<List<User>> object2 = gson.fromJson(jsonStr2, JsonObject.class);
System.out.println(object2);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
运行测试结果:
不过这样解析会有类型未检查的警告
Type safety: The expression of type JsonObject needs unchecked conversion to conform to JsonObject<User>