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

服务器的响应返回列表,其中包含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();
    }
}


这是Book类,具有为Moshi准备的字段。

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

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

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

}


这是用于查询书籍清单的翻新查询。

@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的异常。

最佳答案

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

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


而已。

关于android - 使用Moshi进行 retrofit -将JsonArray转换为String,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49156426/

10-11 00:30