我有一个以以下格式返回json对象的响应:
{
"playerId": "001",
"name": "michel",
"age": 21,
"nation": "USA",
"ratings": [
{
"type": "speed",
"score": "0121"
},
{
"type": "accuracy",
"score": "85"
}
],
"teaminfo": {
"teamName": "HON",
"isValid": "true"
}
}
我有一个Java类:
public class MyRider {
public String playerId;
public String name;
public int age;
public String speed;
public String accuracy;
public String teamName;
public String isValid;
//getter, setter...
}
我想使用GSON将JSON对象映射到Java对象。
我尝试使用JsonDeseriazationContext
反序列化,它返回了JSON中嵌套值的null
。
如果无法更改JSON以准确返回所需内容,我建议您创建与之匹配的类:
MyRider:
public class MyRider {
private String playerId;
private String name;
private int age;
private String nation;
private List<Rating> ratings;
private TeamInfo teaminfo;
// getters, setters, toString override
}
评级:
public class Rating {
private String type;
private String score;
// getters, setters, toString override
}
团队信息:
private static class TeamInfo {
private String teamName;
private String isValid;
// getters, setters, toString override
}
然后像往常一样简单地反序列化:
MyRider rider = gson.fromJson(json, MyRider.class);
如果你需要你在MyRider中指定的字段,考虑一个变压器类来映射上面的完整类到你的需要。
使用自定义反序列化器也可以做到这一点,但有点毫无意义,因为GSON为您提供了正常映射,然后您可以进行调整。
下面是一个反序列化程序示例:
public class MyRiderDeserializer implements JsonDeserializer<MyRider> {
@Override
public MyRider deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
MyRider rider = new MyRider();
if(json.isJsonObject()) {
JsonObject riderObj = json.getAsJsonObject();
rider.setPlayerId(riderObj.get("playerId").getAsString());
rider.setName(riderObj.get("name").getAsString());
rider.setAge(riderObj.get("age").getAsInt());
JsonArray ratingsArray = riderObj.get("ratings").getAsJsonArray();
for(JsonElement ratingElem : ratingsArray) {
JsonObject ratingObj = ratingElem.getAsJsonObject();
String type = ratingObj.get("type").getAsString();
switch(type) {
case "speed":
rider.setSpeed(ratingObj.get("score").getAsString());
break;
case "accuracy":
rider.setAccuracy(ratingObj.get("score").getAsString());
break;
default:
break;
}
}
JsonObject teamInfo = riderObj.get("teaminfo").getAsJsonObject();
rider.setTeamName(teamInfo.get("teamName").getAsString());
rider.setIsValid(teamInfo.get("isValid").getAsString());
}
return rider;
}
}
注意,这不包括验证属性是否实际存在的任何检查,这是我能想到的最简单的自定义反序列化程序。要使用它,必须在Gson
创建时注册类型适配器:
Gson gson = new GsonBuilder()
.registerTypeAdapter(MyRider.class, new MyRiderDeserializer())
.create();
MyRider myRider = gson.fromJson(reader, MyRider.class);
我试图用GSON将一个对象转换成JSON格式。然后,我将把JSON发送给用php编写的webservice。不幸的是,由于某种原因,gson.toJson(object)方法不起作用。 我有这个java对象干预(它包含字符串、日期、时间和位图类型的几个字段)。当我尝试这样做时: 我在gson变量中得到这个: gson={seralizeNulls: false工厂:[Factory[type=co
我使用的是名为Gson的Google JSON API,在设置Java类以便使用方法时遇到了困难。 从JSON数据中,我知道有一个包含所有数据的对象数组。让我感到困惑的是外部标记。我知道我必须构造一个表示对象的类,但是我是否也必须创建一个表示的类,因为它包含? 目前,我有一个名为的文件,其中包含以下内容: 我只包括了我计划使用的变量。上面的JSON数据包含在一个名为的字符串中,这就是我在main方
问题内容: 假设我有json字串 现在我有一个班级用户 现在如何将上述json字符串转换为用户类对象 问题答案: 试试这个:
本文向大家介绍如何使用GSON库将Java对象转换为JSON?,包括了如何使用GSON库将Java对象转换为JSON?的使用技巧和注意事项,需要的朋友参考一下 JSON或JavaScript Object Notation是一种轻量级的基于文本的开放标准,旨在用于人类可读的数据交换。JSON使用的约定是程序员已知的,包括C,C ++,Java,Python,Perl等。 有几种Java库可用于处理
问题内容: 是否有可能使用Gson或JAVA上的任何其他库将匿名对象类型序列化为JSON? 在此示例中,字符串jsonstr返回空值。 问题答案: Gson不支持该功能。从用户指南 与内部类,匿名类和本地类中的外部类相对应的字段将被忽略,并且不包含在序列化或反序列化中 您可以使用一个(或其他)表示匿名类型的超类来描述要使用重载方法进行序列化的内容,但是您仍然会丢失匿名子类中定义的任何新字段。(显然
问题内容: 我有一个列表,我需要使用GSON将其转换为JSON对象。我的JSON对象中包含JSON数组。 以下是我的代码,其中我需要将列表转换为其中具有JSON数组的JSON对象- 到目前为止,列表中只有两项-所以我需要这样的JSON对象- 做这个的最好方式是什么? 问题答案: 如果在您的方法中为,则应进行序列化。 这将为您提供所需的JSON输出。