Я хочу создать парсер для разбора JSON с помощью Gson.
Первый IParser.java
public interface IParser<T> {
public T parse(String json);
}
Второй Parser.java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
public class Parser<T> implements IParser<T> {
@Override
public T parse(String json) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.enableComplexMapKeySerialization().create();
MyJson<T> jsonParsed = gson.fromJson(json, new TypeToken<MyJson<T>>() {
}.getType());
System.out.println(jsonParsed.toString());
return null;
}
}
Третий MyJson.java
public class MyJson<T> {
private int status;
private T data;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
И User.java
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private long usrId;
private String usrNm;
private String usrPwd;
private String usrEml;
public User() {
}
public long getUsrId() {
return usrId;
}
public void setUsrId(long usrId) {
this.usrId = usrId;
}
public String getUsrNm() {
return usrNm;
}
public void setUsrNm(String usrNm) {
this.usrNm = usrNm;
}
public String getUsrPwd() {
return usrPwd;
}
public void setUsrPwd(String usrPwd) {
this.usrPwd = usrPwd;
}
public String getUsrEml() {
return usrEml;
}
public void setUsrEml(String usrEml) {
this.usrEml = usrEml;
}
@Override
public String toString() {
return "User [usrId=" + usrId + ", usrNm=" + usrNm + ", usrPwd="
+ usrPwd + ", usrEml=" + usrEml + "]";
}
}
Моя строка JSON:
{
status: 200,
data: {
usrId: 2,
usrNm: "John",
usrPwd: "123",
usrEml: "[email protected]"
}
}
Я хочу разобрать выше jsonString до объекта MyJson<T>
.
I do:
MyJson<T> jsonParsed = gson.fromJson(json, new TypeToken<MyJson<T>>() {
}.getType());
=> Gson
анализирует мои User
в MyJson
до LinkedTreeMap
Это означает: Object data = jsonParsed.getData();
=> экземпляр данных LinkedTreeMap
Что я хочу: экземпляр данных User
Но, когда я пытаюсь:
MyJson<User> jsonParsed = gson.fromJson(json, new TypeToken<MyJson<User>>() {
}.getType());
gson работает нормально.
Итак, я хочу знать, как заставить gson работать нормально с первым способом (используйте T вместо User), потому что я хочу проанализировать другой объект с помощью Parser.
Спасибо за вашу помощь.