[英]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.