Java 如何使用Reformation2将json解析为带有子类的类

Java 如何使用Reformation2将json解析为带有子类的类,java,android,json,parsing,retrofit2,Java,Android,Json,Parsing,Retrofit2,如何转换给定的json响应 { "name" : "John", "surname" : "Doe", "location" : { "name" : "Paris", "desc" : "Welcome to Paris" } } 进入 这都是关于位置类的嵌套,该类位于Person类中使用@Expose或@SerializedName注释 class Person { @SerializedName("name")

如何转换给定的json响应

{
    "name" : "John",
    "surname" : "Doe",
    "location" : {
        "name" : "Paris",
        "desc" : "Welcome to Paris"
    }
}
进入


这都是关于
位置
类的嵌套,该类位于
Person
类中使用
@Expose
@SerializedName
注释

class Person
{
    @SerializedName("name")
    String name;

    @SerializedName("surname")
    String surname;

    @SerializedName("location")
    Location location;  // new Location(String name, String desc)
}
位置

 class Location
    {
        @SerializedName("name")
        String name;

        @SerializedName("desc")
        String desc;
   }

添加用于访问数据的getter和setter方法

使用Gson+改进的组合

首先,使用改型在模型类的字段中提供的注释
@SerializedName(“yourFieldName”)

使用
RuntimeTypeAdapterFactory启动Gson配置:

RuntimeTypeAdapterFactory<Person> itemFactory = RuntimeTypeAdapterFactory
        .of(Person.class) // The field that defines the type
        .registerSubtype(Location.class, "location")
        .registerSubtype(YourSubclass.class) // if the flag equals the class name, you can skip the second parameter.

Gson gson = new GsonBuilder()
        .registerTypeAdapterFactory(itemFactory)
        .create();

首先获取一个API,并通过AdvanceRESTClient(一个Chrome扩展)获取其JSON输出。现在把输出放到 你会得到你的POJO课程。将它们粘贴到项目中。制作接口`

/**
 * Get Data
 *
 * @param body Holds the JSON payloads
 * @return Formatted data
 */
@POST("JobSpotAPI/getUserInterviewSchedule")
Call<POJOClass> getData(@Body JsonObject body);
创建回收器视图设置其适配器和所有。只需添加一些新方法,如-

 public void updateAnswers(List<Item> items) {
    mItems = items;
    notifyDataSetChanged();
}

private Item getItem(int adapterPosition) {
    return mItems.get(adapterPosition);
}
在活动中声明接口

Interface_name obj = ApiUtils.methodName();
如果您有一些有效载荷,请将它们附加到您的请求。在此之前,您需要一个JSON字符串来传递给API请求。创建JSON有效负载

  private JsonObject makeJsonObjectPayload() {
    JsonObject requestBean = new JsonObject();
    requestBean.addProperty("key", value);
    requestBean.addProperty("key", value);
    requestBean.addProperty("key", value);
    requestBean.addProperty("key", value);
    return requestBean;
传递API请求

obj.getData(makeJsonObjectPayload()).enqueue(new Callback<POJOClass>() {
    @Override
    public void onResponse(Call<POJOClass> call, Response<POJOClass> response) {

        if(response.isSuccessful()) {
            mAdapter.updateAnswers(response.body().getItems());
            Log.d("MainActivity", "posts loaded from API");
        }else {
            int statusCode  = response.code();
            // handle request errors depending on status code
        }
    }

    @Override
    public void onFailure(Call<UserDataPOJOClass> call, Throwable t) {
        //showErrorMessage();
        Log.d("API ERROR",""+t.getMessage());
        Log.d("MainActivity", "error loading from API");

    }
});
obj.getData(makeJsonObjectPayload()).enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
mAdapter.updateAnswers(response.body().getItems());
Log.d(“MainActivity”,“从API加载的帖子”);
}否则{
int statusCode=response.code();
//根据状态代码处理请求错误
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//发送消息();
Log.d(“API错误”,“t.getMessage());
Log.d(“MainActivity”,“从API加载错误”);
}
});

使用此站点根据与第一个响应相比过于复杂的Json响应生成Json类,但仍然有用此方法使整个系统动态化。它允许您通过改造实例自动实例化不同的对象。试试看:)
public class ApiUtils {

public static final String BASE_URL = "https://base_url/";

public static Interface_name methodName() {
    return RetrofitClient.getClient(BASE_URL).create(Interface_name.class);
}}
Interface_name obj = ApiUtils.methodName();
  private JsonObject makeJsonObjectPayload() {
    JsonObject requestBean = new JsonObject();
    requestBean.addProperty("key", value);
    requestBean.addProperty("key", value);
    requestBean.addProperty("key", value);
    requestBean.addProperty("key", value);
    return requestBean;
obj.getData(makeJsonObjectPayload()).enqueue(new Callback<POJOClass>() {
    @Override
    public void onResponse(Call<POJOClass> call, Response<POJOClass> response) {

        if(response.isSuccessful()) {
            mAdapter.updateAnswers(response.body().getItems());
            Log.d("MainActivity", "posts loaded from API");
        }else {
            int statusCode  = response.code();
            // handle request errors depending on status code
        }
    }

    @Override
    public void onFailure(Call<UserDataPOJOClass> call, Throwable t) {
        //showErrorMessage();
        Log.d("API ERROR",""+t.getMessage());
        Log.d("MainActivity", "error loading from API");

    }
});