{
"LocalLocationId [id=1]":{
"type":"folderlocation",
"id":{
"type":"locallocationid",
"id":1
},
"parentId":{
"type":"locallocationid",
"id":0
},
"name":"Test",
"accessibleToUser":true,
"defaultLocation":false,
"timezoneId":"Asia/Calcutta",
"children":[]
},
"LocalLocationId [id=0]":{
"type":"folderlocation",
"id":{
"type":"locallocationid",
"id":0
},
"parentId":null,
"name":"Locations",
"accessibleToUser":false,
"defaultLocation":false,
"timezoneId":"Asia/Calcutta",
"children":[{
"type":"locallocationid",
"id":1
}]
},
"allAllowedChildren":[{
"type":"locallocationid",
"id":1
}]
}
如何将上述字符串反序列化为java对象。
正在使用的类为
public class Tree {
@SerializedName("allAllowedChildren")
private List<Id> allAllowedChildren;
@SerializedName("LocalLocationId")
private Map<String, LocalLocationId> localLocationId;
public class LocalLocationId {
@SerializedName("type")
private String type;
@SerializedName("name")
private String name;
@SerializedName("accessibleToUser")
private boolean accessibleToUser;
@SerializedName("defaultLocation")
private boolean defaultLocation;
@SerializedName("timezoneId")
private String timezoneId;
@SerializedName("id")
private Id id;
@SerializedName("parentId")
private Id parentId;
@SerializedName("children")
private List<Id> children;
public String getType() {
return type;
}
public String getName() {
return name;
}
public boolean isAccessibleToUser() {
return accessibleToUser;
}
public boolean isDefaultLocation() {
return defaultLocation;
}
public String getTimezoneId() {
return timezoneId;
}
public Id getId() {
return id;
}
public Id getParentId() {
return parentId;
}
public List<Id> getChildren() {
return children;
}
}
public class Id {
private String type;
private Integer id;
public String getType() {
return type;
}
public Integer getId() {
return id;
}
}
public List<Id> getAllAllowedChildren() {
return allAllowedChildren;
}
public Map<String, LocalLocationId> getLocalLocationId() {
return localLocationId;
}
}
4条答案
按热度按时间ybzsozfc1#
@克达尔
我假设您可以控制JSON输入字符串的创建方式,我认为JSON字符串的格式对于Map类型的默认GSON反序列化不正确。
我已根据您的考虑修改了输入字符串,这将导致非空LocalLocationId
如果我对输入字符串的假设不正确,请进行评论。
编辑1:由于输入无法修改,请考虑编写自定义反序列化程序。以下是注册自定义反序列化类的方法
下面是TreeDeserializer
下面是Sysouts的控制台输出。
我在反序列化器中留下了TODO,您需要在其中编写自定义代码,以便将反序列化的值注入到刚刚创建的Tree类中。希望这能有所帮助。无法提供完整的实现,但我认为这将是一个部分解决方案
toe950272#
使用JSONParser,这是速度较快的一种。
下面是一个示例。如果你用谷歌搜索的话,可以有一个更好的示例。希望这对你有帮助。
hgc7kmma3#
你可以用Gson ..
0x6upsns4#
你可以用Jackson的
ObjectMapper
-