Android 使用改型2从响应JSON获取单个JSON属性值
我正在使用改型库(撰写本文时为2.0.2版) 我正在对一个响应一个大JSON对象的服务进行GET调用,但我只对其中的一个键:值对感兴趣 我怎样才能做到这一点,而不是编写一个与JSON响应匹配的全新POJO类 示例-Android 使用改型2从响应JSON获取单个JSON属性值,android,json,retrofit2,Android,Json,Retrofit2,我正在使用改型库(撰写本文时为2.0.2版) 我正在对一个响应一个大JSON对象的服务进行GET调用,但我只对其中的一个键:值对感兴趣 我怎样才能做到这一点,而不是编写一个与JSON响应匹配的全新POJO类 示例- { status_code: 34, status_message: "The resource you requested could not be found.", ..., ... } 我只需要状态代码值(这里是34) 请注意,我只是在这里给出这个JSON对象
{
status_code: 34,
status_message: "The resource you requested could not be found.",
...,
...
}
我只需要状态代码值(这里是34)
请注意,我只是在这里给出这个JSON对象的一个示例。我正在处理的真正的一个是巨大的,我只关心一个关键:其中的值对
提前感谢。您可以参考以下内容:
@GET("/files/jsonsample.json")
Call<JsonObject> readJsonFromFileUri();
@GET(“/files/jsonsample.json”)
调用readJsonFromFileUri();
及
类MyStatus{
int状态代码;
}
...
改装改装2=新改装.Builder()
.baseUrl(“http://...")
.addConverterFactory(GsonConverterFactory.create())
.build();
WebAPIService apiService=2.create(WebAPIService.class);
调用jsonCall=apiService.readJsonFromFileUri();
jsonCall.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
字符串jsonString=response.body().toString();
Gson Gson=新的Gson();
MyStatus status=gson.fromJson(jsonString,MyStatus.class);
Log.i(Log_标记,String.valueOf(status.status_代码));
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(Log_标记,t.toString());
}
});
...
调试屏幕截图
所以自定义类中属性的名称(此处MyStatus中的状态代码)必须与JSON键匹配?是的,你不想这样吗?哦,不,我对任何名称都很满意,但我想问的是,这是它工作的一个要求,以便它知道需要从JSON中提取什么键吗?是的,您可以尝试在MyStatus类中从
status\u code
更改为statuscode
,然后您将看到不同的结果。如果要更改它,您需要类MyStatus{@SerializedName(“status_code”)int statuscode;}
例如。你可以在“谢谢你的回答”找到更多信息,两个答案都有效。不过,我还是会支持格森。至少在我的例子中,当Gson拥有为任何键获取值所需的所有方法时,我发现没有必要转换Gson->String->Json->String(应答值)。
class MyStatus{
int status_code;
}
...
Retrofit retrofit2 = new Retrofit.Builder()
.baseUrl("http://...")
.addConverterFactory(GsonConverterFactory.create())
.build();
WebAPIService apiService = retrofit2.create(WebAPIService.class);
Call<JsonObject> jsonCall = apiService.readJsonFromFileUri();
jsonCall.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
String jsonString = response.body().toString();
Gson gson = new Gson();
MyStatus status = gson.fromJson(jsonString, MyStatus.class);
Log.i(LOG_TAG, String.valueOf(status.status_code));
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.e(LOG_TAG, t.toString());
}
});
...