【发布时间】:2019-12-20 13:51:58
【问题描述】:
我正在尝试从 json 响应中获取特定的字符串值。就我而言,我只需要值“George”:
{
"data": {
"book_one": {
"author": "George"
},
"book_two": {
"author": "Thomas"
},
"book_three": {
"author": "Henry",
"award": "Gold"
}
}
}
但是如果我只是从第一本书中寻找作者的名字,我如何区分不同书籍的作者?
我尝试从这里Retrofit 2: Get JSON from Response body 得到答案
我认为我没有正确理解它,因为我得到了一个空值。
我尝试了以下方法:
Call<Result> checkData(@Field("author") String author);
创建了一个名为 Result 的类:
@SerializedName("data")
@Expose
private String data;
@SerializedName("book_one")
@Expose
private String book_one;
@SerializedName("author")
@Expose
private String author;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getBookOne() {
return book_one;
}
public void setBookOne(String book_one) {
this.book_one = book_one;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
我尝试拨打以下电话:
call.enqueue(new Callback<Result>() {
@Override
public void onResponse(Call<Result> call, Response<Result> response) {
if(response.isSuccessful()){
response.body(); // have your all data
String author =response.body().getAuthor();
LOG.d(TAG, "author = " + author);
}else Toast.makeText(context,response.errorBody().string(),Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<Result> call, Throwable t) {
Toast.makeText(context,t.toString(),Toast.LENGTH_SHORT).show(); // ALL NETWORK ERROR HERE
}
});
我得到的只是一个空值,而不是我所期望的“乔治”。我意识到我也没有指定我只是在“book_one”下寻找作者,但我不知道该怎么做。谁能指导我?
【问题讨论】:
-
那是您的原始 Json 数据吗?如果是这样,那么 Json 数据的格式不正确。
-
对不起,我用服务器提供的原始 json 数据编辑了原始问题。是否可以只获取 book_one 的作者值?
-
您的名为 Result 的类似乎与您的 JSON 数据不匹配。在网上搜索 JSON to POJO 类。您会发现许多用于创建 POJO 类的链接。使用这些链接中的任何一个来创建正确的 POJO 类。
标签: java android json get retrofit