Java 如何使用Reformation2将json解析为带有子类的类
如何转换给定的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")
{
"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");
}
});