1
有人可以解釋我GSON分析映射對象,我怎麼能解析JSON無鑰匙
{
"5": {
"NumPossibleAchievements": "2",
"PossibleScore": "15",
"NumAchieved": 0,
"ScoreAchieved": 0,
"NumAchievedHardcore": 0,
"ScoreAchievedHardcore": 0
},
"1838": {
"NumPossibleAchievements": "48",
"PossibleScore": "400",
"NumAchieved": "48",
"ScoreAchieved": "400",
"NumAchievedHardcore": "48",
"ScoreAchievedHardcore": "400"
},
"7634": {
"NumPossibleAchievements": 0,
"PossibleScore": 0,
"NumAchieved": 0,
"ScoreAchieved": 0,
"NumAchievedHardcore": 0,
"ScoreAchievedHardcore": 0
}
}
現在,我,我想使用的響應
public class UserProgress {
private Map<String, Progress> userProgress;
public Map<String, Progress> getUserProgress() {
return userProgress;
}
}
類也代表內部類對象在這張地圖中
public class Progress {
@SerializedName("NumPossibleAchievements")
private String numPossibleAchievements;
@SerializedName("PossibleScore")
private String possibleScore;
@SerializedName("NumAchieved")
private int numAchieved;
@SerializedName("ScoreAchieved")
private int scoreAchieved;
@SerializedName("NumAchievedHardcore")
private int numAchievedHardcore;
@SerializedName("ScoreAchievedHardcore")
private int scoreAchievedHardcore;
.....
而自定義的反序列化器應該解析這個類型的JSON到普通的對象。我將這個解串器添加到翻新轉換器中。
public class UserProgressDeserializer implements JsonDeserializer<UserProgress> {
@Override
public UserProgress deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
final JsonObject jsonObject = json.getAsJsonObject();
final Map<String, Progress> parameters = readParametersMap(jsonObject);
final UserProgress result = new UserProgress();
if (parameters != null) result.setUserProgress(parameters);
return result;
}
@Nullable
private Map<String, Progress> readParametersMap(@NonNull final JsonObject jsonObject) {
final JsonElement paramsElement = jsonObject.getAsJsonObject();
if (paramsElement == null) return null;
final JsonObject parametersObject = paramsElement.getAsJsonObject();
final Map<String, Progress> parameters = new HashMap<>();
for (Map.Entry<String, JsonElement> entry : parametersObject.entrySet()) {
String key = entry.getKey();
Progress value = new Gson().fromJson(entry.getValue().getAsString(), Progress.class);
parameters.put(key, value);
}
return parameters;
}
}
,我有所求
@GET("API_GetUserProgress.php")
Flowable<UserProgress> getUserProgress(@Query("u") @NonNull String userName,
@Query("i") String gamesCSV);
申請工作,在生的身體我看到JSON,但對象包含空映射。我測試了斷點,但它永遠不會進入解串器。現在我的想法是創建自定義函數,它將解析來自響應原始主體的JSON字符串,但這將會出現尖峯。
感謝所有幫助
有沒有你不使用[GSON轉換器]任何原因(https://github.com/square/retrofit/tree/master/retrofit-converters/gson)? – SpaceBison