[英]convert member field map in class into JSON by GSON
我已經使用了GSON
一段時間了,我認為它非常有用!
今天我遇到了一個問題,我想這可能是指GSON
一些高級用法。
這是我的班級定義:
class ResolvedID
{
private String type;
private HashMap<String,String> data=new HashMap<>(4);
public String getType()
{
return this.type;
}
public void setType(String type)
{
this.type=type;
}
public void put(String K, String V)
{
this.data.put(K,V);
}
}
在那之后我將以一些合適的方式執行以下操作,這里我只是簡單地寫一下:
我將把一些數據放入這個哈希映射:
ResolvedID id=new ResolvedID();
id.setType("Bachelor");
id.put("school","Computer Science School");
id.put("major","Software Engineering");
id.put("grade","2009");
我希望GSON可能將其轉換為
{"type":"Bachelor", "data":{"school":"Computer Science School", "grade":"2009", "major":"Software Engineering"}}
但不幸的是我只得到了
{"type":"Bachelor"}}
任何人GSON
這類成員字段容器指定一些方向,以便由GSON
轉換為json
這個
A a = new A();
a.data = new HashMap<>();
a.type="teacher";
a.data.put("degree","bachelor");
a.data.put("grade","2013");
Gson gson = new Gson();
System.out.println(gson.toJson(a));
版畫
{"type":"teacher","data":{"degree":"bachelor","grade":"2013"}}
為了我。
您不能初始化data
。 默認情況下,Gson如果為null
則不會序列化字段。
將JavaBeans與嵌套類一起使用可能更容易。 這是一個例子:
注意:顯然你會以不同的方式構建你的JsonResponseData類 - 我只是在類中設置前綴值以獲得一個快速示例。
嵌套Pojo:
public class JsonResponseData {
private JsonResponse mResponse = new JsonResponse();
public JsonResponse getJsonResponse(){
return mResponse;
}
public void setJsonResponse(JsonResponse mResponse){
this.mResponse = mResponse;
}
private static class JsonResponse {
private int part = 1;
private UserData data = new UserData();
}
private static class UserData {
private User user = new User();
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;
}
}
public static class User {
private String id = "5";
private String firstName = "User";
private String lastName = "Name";
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
}
}
測試類:
public class Test {
private static Gson gson;
private static JsonResponseData data;
public static void main(String[] args){
gson = new Gson();
data = new JsonResponseData();
System.out.print(gson.toJson(data));
}
}
輸出:
{ “mResponse”:{ “部分”:1, “數據”:{ “用戶”:{ “ID”: “5”, “名字”: “用戶”, “姓氏”: “姓名”}}}}
我終於解決了這個問題,我的問題是我沒有這個哈希映射的getter
,我認為GSON
會使用反映成員字段。
如果成員字段是公共范圍的,則GSON
可以獲取這些字段並對其進行序列化。
如果成員字段是私有作用域, GSON
將通過getter
獲取它們,因此GSON
無法序列化那些沒有getter
私有字段,就像我上面的實例一樣。
class ResolvedID
{
private String type;
private HashMap<String,String> data=new HashMap<>(4);
public String getType()
{
return this.type;
}
public void setType(String type)
{
this.type=type;
}
//----getter is important for private member field to be reflected by GSON!
public HashMap getData()
{
return this.data;
}
public void put(String K, String V)
{
this.data.put(K,V);
}
}
為我的班級添加一個getter后,它現在已成功執行! 現在我對GSON
的反射程序GSON
更多的理解!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.