首页 > 解决方案 > Android:如何使用改造从 json 响应中获取特定字符串?

问题描述

我正在尝试从 json 响应中获取特定的字符串值。就我而言,我只需要值 "George" :

{
    "data": {
        "book_one": {
            "author": "George"
        },
        "book_two": {
            "author": "Thomas"
        },
        "book_three": {
            "author": "Henry",
            "award": "Gold"
        }
    }
}

但是,如果我只是从第一本书中寻找作者的名字,我如何区分来自不同书籍的作者?

我试着从这里改造 2:从响应正文中获取 JSON的答案

我认为我没有正确理解它,因为我得到了一个空值。

我尝试了以下方法:

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”下寻找作者,但我不知道该怎么做。谁能指导我?

标签: javaandroidjsongetretrofit

解决方案


像这样试试

JSONObject books= obj.getJSONObject("data");
JSONObject book = books.getJSONObject("book_one");
String authName = book.getString("author");
System.out.println(authName );

推荐阅读