Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用改型2从响应JSON获取单个JSON属性值_Android_Json_Retrofit2 - Fatal编程技术网

Android 使用改型2从响应JSON获取单个JSON属性值

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对象

我正在使用改型库(撰写本文时为2.0.2版)

我正在对一个响应一个大JSON对象的服务进行GET调用,但我只对其中的一个键:值对感兴趣

我怎样才能做到这一点,而不是编写一个与JSON响应匹配的全新POJO类

示例-

{
  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());
    }
});
...