如何使用 Retrofit 查询某些 JSON 项目?

Posted

技术标签:

【中文标题】如何使用 Retrofit 查询某些 JSON 项目?【英文标题】:How do I query certain JSON items using Retrofit? 【发布时间】:2019-06-20 08:08:56 【问题描述】:

我正在使用Retrofit 收集和解析我创建并上传到互联网的JSON 数据。我可以成功显示所有数据,但作为 Retrofit 的新手,我很难理解如何从 JSON 数据中查询和显示某些项目。

我设法使用interface 显示所有JSON 数据:

@GET("d6jww")
Call<List<RetrofitVariables>> findPosts();

RetrofitonResponse() 方法中。但是,如果我只想显示 JSON 对象的名称或 id 怎么办。我该如何查询?

我试过了:

@GET("d6jww")
Call<List<RetrofitVariables>> getId(
        @Query( "id" )
                String id);

和:

@GET("d6jww")
Call<List<RetrofitVariables>> getId(
        @Query("SELECT * FROM id")
                String id);

但在我的ViewModel android-Studio 中要我在使用interface 时添加一个参数,而我真的不知道如何使用它:

public Call<List<RetrofitVariables>> getRepositoryId() 
    return this.repository.getRetrofitRepository().getId( ??? );

我的JSON 看起来像这样:

[
    "id":231, "name": "Bob", "date":"3/13/2015",     
    "from":"8:00","until":"13:00",

    "id":232, "name": "Joe", "date":"1/3/2015",   
    "from":"12.30","until":"13:00"
]

总结一下我的问题:

    我可以直接查询JSON,还是我需要先将其放入Room,然后从那里查询?

    如果我可以直接查询JSON,我如何构造接口(收集名称或id)?缺少的参数是怎么回事?

    如何查询特定名称?例如,如果我想查询 Bob 是否在 JSON 数据中,我该如何设置该接口?

提前谢谢你:)

【问题讨论】:

首先你不能在@Dao AFAIK之外使用@Query,其次你不能查询JSON。我建议对数据进行建模,然后将其存储在 Room 中。查看此代码实验室codelabs.developers.google.com/codelabs/… 啊,我也很怀疑。那么,没有(好的)方法可以直接从 JSON 数据中获取某些部分吗?谢谢@christoandrew 搜索JSON并非完全不可能,但如果您愿意,可以查看github.com/google/gson 【参考方案1】:

这不是你想做的,但无论如何。

为此:

    如果我可以直接查询 JSON,我如何构建接口(收集名称或 id)?缺少的论点是怎么回事?

和评论:

那么,没有(好的)方法可以直接从 JSON 数据中提取某些部分吗?

您无法影响服务返回的内容,但您可以选择您选择的内容。假设您通常拥有这种 DAO(完整的 Post - 或者是 Person?- 数据):

public class Post 
    private String id;
    private String name;
    private String date;
    private String from;
    private String until;

通常你可能有类似的东西(不是必需的,而是作为一个例子):

@GET("d6jww")
Call<List<Post>> findPosts();

要将数据限制在某些字段中,您可以为其声明一个新的 DAO。喜欢:

@Getter @Setter
public class PostId 
    private String id;

以及指向同一端点的新 API 方法:

@GET("d6jww")
Call<List<PostId>> getPostIds();

但无论如何,您需要在客户端进行过滤。

【讨论】:

呵呵,谢谢你帮助@pirho :) 房间,我想,仍然是要走的路 :)

以上是关于如何使用 Retrofit 查询某些 JSON 项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有查询的情况下在 Retrofit 中提取 Json 数据

如何使用 Retrofit .... 解析嵌套的 json?

如何使用 Retrofit 解析 json

如何使用 Retrofit 解析嵌套/多个 Json 对象

如何使用 Retrofit 和 Jackson 读取嵌套的 JSON 数组?

如何使用 Retrofit 2 处理动态 JSON?