【问题标题】:Retrofit with Moshi - convert JsonArray to String使用 Moshi 进行改造 - 将 JsonArray 转换为字符串
【发布时间】:2018-03-07 16:07:38
【问题描述】:

下面我准备了一些我在对服务器执行查询时使用的代码。

来自服务器的响应返回包含 json 格式书籍的列表。 params 字段之一包含 json 数组中的列表。

如何强制 Moshi 将此字段视为原始字符串?

这是我的代码的解释。

这是一个伪类,我称之为 Retrofit 实例。

public final class RestApi {
    private static final String API_ENDPOINT_KEY = "...";
    private final MyApi myApi;

    private RestApi() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        OkHttpClient client = builder.build();

        final Retrofit retrofit = (new Retrofit.Builder())
                .baseUrl(API_ENDPOINT_KEY)
                .client(client)
                .addConverterFactory(MoshiConverterFactory.create())
                .build();

        myApi = retrofit.create(MyApi.class);
    }

    public static RestApi getInstance() {
        return RestApiGazeta.InstanceHolder.INSTASNCE;
    }

    private static final class InstanceHolder {
        private static final RestApi INSTASNCE = new RestApi();
    }
}

这是为 Moshi 准备好字段的 Book 类。

@Generated("com.robohorse.robopojogenerator")
public class Book{

    @Json(name = "pages")
    private int pages;

    @Json(name = "params")
    private Params params;

}

这是 Retrofit 查询书籍列表的查询。

@GET("android/getBooks.json")
Call<List<Book>> getBooks(
        @Query("section") String section
);

我尝试将 Book 类类型 Params 中的返回类型更改为 String,但我返回了关于 Expected a string but was BEGIN_ARRAY at path $[0].params 的异常。

【问题讨论】:

  • 这是您要求的吗? github.com/square/moshi/issues/318订阅问题。
  • 听听您为什么喜欢这个功能会很有趣。通常,类型由其他类型组成,而不是混合类型和 JSON。
  • @EricCochran 想象一下,您必须将巨大的 json 响应存储到 sqlite,但将它们放到单个表中。因此嵌套的参数将被展平并存储到单列中。

标签: android retrofit2 moshi


【解决方案1】:

好的,我已经阅读了 Moshi 文档,似乎很容易将任何字段转换为 json 字符串。我不知道如何即时解析它,但这里是在你准备好(在我的情况下)Book object 之后如何做的解决方案。

Moshi moshi = new Moshi.Builder().build();
JsonAdapter<Params> jsonAdapter = moshi.adapter(Params.class);
String json = jsonAdapter.toJson(body.getParams());

就是这样。

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2023-03-21
    • 1970-01-01
    • 2013-03-30
    • 2011-09-21
    • 2012-04-28
    • 2017-03-14
    • 2013-05-08
    • 2015-03-29
    相关资源
    最近更新 更多