com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

安萨尔

我试图解析这个json

{"status":"ok","results":{"query":{"id":"6081","name":"UB1656-Palazzo Versace Resort in Culture Village","query":"Aswathy VS : <\/strong>
Test Query","add_date":"2014-08-05 08:27:45"},"replies":[{"replied_by":"Ventures Onsite","replied_on":"05-Aug-2014 09:05:19 AM","reply":"We have received your Test Query."},{"replied_by":"Me","replied_on":"05-Aug-2014 01:28:00 PM","reply":"Thanks... "}]}}

我的Pojo课堂

import java.util.ArrayList;

public class QueryRepliesList {
    public String status;

public ArrayList<Result> results;

    public class Replies {

        public String id;
        public String name;
        public String query;
        public String add_date;
        public String replied_by;
        public String replied_on;
        public String reply;

    }

    public class Result {

        public ArrayList<Replies> query;
        public ArrayList<Replies> replies;


    }
}

我想通过这个来称呼它

QueryRepliesList        queryReply = gson.fromJson(reader,
                            QueryRepliesList.class);

但是我有以下异常

引起原因:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为字符串,但为BEGIN_OBJECT

我尝试通过改变

根据类似问题的答案建议几次进行Pojo课,但是没有任何效果,请一些帮助。提前感谢

起源

根据JSON您提供的信息,我看不到如何获取所提供的错误,相反,您会看到

预期为BEGIN_ARRAY,但为BEGIN_OBJECT

因为resultsquery都是JSON_OBJECT为了说明这一点,我将所有内容都放入了junit测试中。

@org.junit.Test
public void asPosted() {
    final String json = "{'status':'ok','results':{'query':{'id':'6081','name':'UB1656-Palazzo Versace Resort in Culture Village','query':'Aswathy VS : <\\/strong>\n"
            + "Test Query','add_date':'2014-08-05 08:27:45'},'replies':[{'replied_by':'Ventures Onsite','replied_on':'05-Aug-2014 09:05:19 AM','reply':'We have received your Test Query.'},{'replied_by':'Me','replied_on':'05-Aug-2014 01:28:00 PM','reply':'Thanks... '}]}}";

    QueryRepliesContainer data = new Gson().fromJson(json, QueryRepliesContainer.class);
    Assert.assertEquals("ok", data.getStatus());
    Assert.assertEquals(2, data.getRepliesCount());
    Assert.assertEquals("6081", data.getQueryId());
}

通常,您将为每个创建一个POJOJSON_OBJECT例外情况包括提供自定义解串器。根据需要公开“内部”数据的程度,您将需要迁移内部类以进行公共级别的公开。我将它们分别嵌套在JSON结构上。因此,根据所提供的内容,您将需要与以下内容类似的内容:

 class QueryRepliesContainer {

    private String status;
    private Result results;

    public String getStatus() {
        return status;
    }

    public int getRepliesCount() {

        return results.replies.size();
    }

    public String getQueryId() {
        return results.query.id;
    }

    private class Result {

        private Query query;
        private List<Replies> replies;

        private class Query {

            private String id;
            private String name;
            private String query;
        }

        private class Replies {

            private String add_date;
            private String replied_by;
            private String replied_on;
            private String reply;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档