Java 使用安卓改型解析嵌套JSON

Java 使用安卓改型解析嵌套JSON,java,android,json,rest,retrofit,Java,Android,Json,Rest,Retrofit,我使用改型是为了与我的API通信。响应是JSON,其中一个JSON对象('user')是字符串。我想将该字符串解析为JSON 我有一个课程来回答: public class TokenModel { @SerializedName("access_token") private String accessToken; @SerializedName(".expires") private String expiryDate; private UserModel

我使用改型是为了与我的API通信。响应是JSON,其中一个JSON对象('user')是字符串。我想将该字符串解析为JSON

我有一个课程来回答:

public class TokenModel {
   @SerializedName("access_token")
   private String accessToken;

   @SerializedName(".expires")
   private String expiryDate;

   private UserModel user;


   public String getAccessToken() {
       return accessToken;
   }

   public void setAccessToken(String accessToken) {
       this.accessToken = accessToken;
   }

   public String getExpiryDate() {
       return expiryDate;
   }

   public void setExpiryDate(String expiryDate) {
       this.expiryDate = expiryDate;
   }

   public UserModel getUser() {
       return user;
   }

   public void setUser(UserModel user) {
       this.user = user;
   }
}
以及用户的一个类:

public class UserModel {
   private int id;

   private String email;

   private String firstName;

   private String lastName;

   private String profileImageUrl; etc...
但是,由于响应中的“user”对象是字符串,因此需要首先将其解析为JSON。我不确定如何做到这一点,仍然使它与模型的工作。有没有一种方法可以告诉改型在将其应用到模型之前先将其解析为JSON

谢谢,,
使用@corsair992的建议,丹尼尔变得非常简单

创建自定义反序列化程序以将字符串解析为Json:

public class UserDeserializer implements JsonDeserializer<UserModel> {
    @Override
    public UserModel deserialize(JsonElement jsonElement, Type typeOF,
                                 JsonDeserializationContext context)
            throws JsonParseException {
        String userString = jsonElement.getAsString();
        JsonElement userJson = new JsonParser().parse(userString);

        return new Gson().fromJson(userJson, UserModel.class);
    }
}

这将把字符串转换成Json,并使其与模型一起工作。

因此,更改响应格式以使用Json对象?@corsair992很遗憾,它无法更改,需要由客户端解析。您可以通过注册自定义
TypeAdapter
s自定义GSON脱敏,然后在
RestAdapter
上设置一个自定义的
GsonConverter
。四处搜索,你会找到很多关于如何操作的示例和教程。这个问题真的应该被标记为一个重复的问题,因为我确信这已经在堆栈溢出上发布过了。
RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .setConverter(new GsonConverter(new GsonBuilder().registerTypeAdapter(UserModel.class, new UserDeserializer()).create()))
                .setEndpoint(getString(R.string.url_base))
                .build();