【发布时间】: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,但将它们放到单个表中。因此嵌套的参数将被展平并存储到单列中。