首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Moshi解析嵌套JSON时出错

使用Moshi解析嵌套JSON时出错
EN

Stack Overflow用户
提问于 2018-07-18 02:34:03
回答 1查看 3.6K关注 0票数 1

错误接收到

com.squareup.moshi.JsonDataException:期望一个字符串,但在路径$上是BEGIN_OBJECT

JSON被解析为

缩短以便于阅读

代码语言:javascript
复制
{
    "success": true,
    "error": null,
    "data": {
        "review_on_me": [
            {
                "request_id": "51",
                "review_from": "9",
                "reviewer": {
                    "id": 9,
                    "first_name": "abc",
                    "device_meta": {
                        "device_type": "iphone",
                        "device_id": "abc"
                    },
                    "location": {
                        "latitude": "43.881731",
                        "longitude": "-79.444322"
                    }
                }
            }
    ]
}

模型类

代码语言:javascript
复制
public class ResponseGetReviews
 {
    @Json(name = "success")
    private Boolean success;
    @Json(name = "error")
    private String error;
    @Json(name = "data")
    private ReviewDataModel data;
}

正在使用的JSON适配器

其中一些是针对所有后续数据对象的。这个是为了展示他们是什么样的

代码语言:javascript
复制
public class ResponseGetReviewsAdapter extends JsonAdapter<ResponseGetReviews>
{
    @Override
    public ResponseGetReviews fromJson(JsonReader reader) throws IOException
    {
        Moshi moshi = new Moshi.Builder().build();
        JsonAdapter<ResponseGetReviews> jsonAdapter = moshi.adapter(ResponseGetReviews.class);

        return jsonAdapter.fromJson(reader.nextString());
    }

    @Override
    public void toJson(JsonWriter writer, ResponseGetReviews value) throws IOException
    {
        Moshi moshi = new Moshi.Builder().build();
        JsonAdapter<ResponseGetReviews> jsonAdapter = moshi.adapter(ResponseGetReviews.class);

        writer.value(jsonAdapter.toJson(value));
    }
}

函数调用

代码语言:javascript
复制
Moshi moshi = new Moshi.Builder()
                .add(ResponseGetReviews.class, new ResponseGetReviewsAdapter())
                .add(ReviewDataModel.class, new ReviewDataModelAdapter())
                .add(ReviewDetailModel.class, new ReviewDetailModelAdapter())
                .add(UserModel.class, new UserModelAdapter())
                .add(LocationModel.class, new LocationModelAdapter())
                .add(DeviceMetaModel.class, new DeviceMetaModelAdapter())
                .build();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(RestAPI.ENDPOINT)
                .addConverterFactory(MoshiConverterFactory.create(moshi))
                .build();
        RestAPI restApi = retrofit.create(RestAPI.class);
        Call<ResponseGetReviews> getReviewsCall = restApi.getClientReviews(auth, clientId);
EN

回答 1

Stack Overflow用户

发布于 2018-08-01 10:18:08

问题在您的return jsonAdapter.fromJson(reader.nextString());中。通过这种方式,您可以说您希望从JSON中读取一个String,但是由于您位于对象的开头(错误消息中的$就是这个意思),所以您没有字符串,而是一个对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51392747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档