我正在尝试从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”下查找作者,但不确定如何这样做。谁能指导我?
最佳答案
像这样尝试
JSONObject books= obj.getJSONObject("data");
JSONObject book = books.getJSONObject("book_one");
String authName = book.getString("author");
System.out.println(authName );