用gson改造。如何解析响应?

时间:2015-04-21 09:00:07

标签: android gson retrofit

我在项目中使用retrofit和gson。 答案来自服务器,格式为

{
   1:"user1",
   2: "user2"
}

我有结构pojo

public class User {

@Expose
@Getter
@Setter
private int uid;
@Expose
@Getter
@Setter
private String nick;}

请求改造

@Get("/")   
User getPojousers();

但是回应动态密钥。如何描述响应类?

2 个答案:

答案 0 :(得分:0)

您必须自己解析Users课程(以SparseArray为例):

public static class Users implements JsonDeserializer<User> {
    public SparseArray<String> values = new SparseArray<>();

    @Override
    public Users deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        Users u = new Users();
        if (json.isJsonObject()) {
            JsonObject obj = (JsonObject) json;

            for (Map.Entry<String, JsonElement> elem : obj.entrySet()) {
                if (Util.isInteger(elem.getKey())) {
                    u.values.put(Integer.parseInt(elem.getKey()), elem.getValue().getAsString());
                }
            }
        }
        return u;
    }
}

要完成此项工作,请将TypeAdapter添加到Gson实例:

private static GsonConverter getConverter() {
    GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(Users.class, new Users());

    return new GsonConverter(builder.create());
}

RestAdapter实例中使用此转换器:

mInstance = new RestAdapter
                .Builder()
                .setConverter(getConverter())
                .//
                .create(...)

答案 1 :(得分:0)

这是一个自定义适配器,它将返回该对象的用户列表。 (你可能需要修复json,使其有效,首先)

@Override
public List<User> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    List<User> result = new ArrayList<>();

    for (Map.Entry<String, JsonElement> elem : json.getAsJsonObject().entrySet()) {
        result.add(new User(Integer.parseInt(elem.getKey()), elem.getValue()));
    }
    return result;
}

当然,你的User课程需要一个带有这两个参数的构造函数。