解析JSON与可变键的改造
问题描述:
我正在与改造库的应用程序,但我不负责后端。解析JSON与可变键的改造
这是我在出现错误时收到的JSON。 例如,当参数“邮件”是错误的,我得到这个作为JSON响应:
{"status":"error","errors":{"email":{"emailNotFound":"Email not found"}}}
现在,“电子邮件”的部分是,这是错误的参数。如何为此创建一个对象,以便我可以重复使用多个参数。
我有这样的:
public class AuthenticateResponse {
@Expose
private String status;
@Expose
private Error errors;
@Expose
private String session;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getSession() {
return session;
}
public void setSession(String session) {
this.session = session;
}
public Error getErrors() {
return errors;
}
public void setErrors(Error errors) {
this.errors = errors;
}
}
但我不知道如何使我的错误对象,因为关键是可变的。在这种情况下,它是'电子邮件',但它总是不同。
我有这个
public class Errors {
private List<Object> list;
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
}
但“清单”是不是在JSON的关键所以这是行不通的。
任何解决方案?
答
我找到了一个解决方案。您可以在改造这样的注册类型的适配器:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Errors.class, new ErrorAdapter())
.create();
比传递转换器RestAdapter
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(ENDPOINT)
.setRequestInterceptor(requestInterceptor)
.setConverter(new GsonConverter(gson))
.build();
而在ErrorAdapter我手动
public static class ErrorAdapter implements JsonDeserializer<Errors> {
@Override
public Errors deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Errors errors = new Errors();
try {
if (json != null) {
JsonObject jsonObject = json.getAsJsonObject();
for (Map.Entry<String, JsonElement> elementJson : jsonObject.entrySet()) {
JsonObject error = elementJson.getValue().getAsJsonObject();
String errorValue = error.entrySet().iterator().next().getKey();
errors.addError(errorValue);
}
}
} catch (Exception e) {
errors = null;
}
return errors;
}
}
答
只是要响应等级是这样的:
public class EmailReponse{
public String status;
public MError errors;
public static class MError{
public HashMap<String, String> email;
}
}
这种反应,你可以得到电子邮件的对象像一个HashMap。 希望这能帮到你!
解析JSON与尝试简单的hashmap – 2014-10-09 08:00:06