【问题标题】:Android: How to get specific string from json response using retrofit?Android:如何使用改造从 json 响应中获取特定字符串?
【发布时间】: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


【解决方案1】:

这样试试

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多