gson错误:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT但在第1行第166列为STRING

时间:2013-04-04 09:32:02

标签: java json gson

我有以下课程SolrFBLocationDoc

public class SolrFBLocationDoc{

    @Field
    private String name;
    @Field
    private String id;
    @Field
    private Location location = new Location();

    //and some more class members
}

其中,Location是来自restfb的类:com.restfb.types.Location

我正在尝试将solrDocument转换为类SolrFBLocationDoc的对象,如下所示:

SolrFBLocationDoc doc = gson.fromJson(gson.toJson(solrDoc), SolrFBLocationDoc.class);

其中,solrDoc是:

SolrDocument[{id=106377336067638, location=Location[city=null country=null latitude=null longitude=null state=null street=null zip=null]}]

gson.toJson(solrDoc)返回,

{"id":"106377336067638","location":"Location[city\u003dnull country\u003dnull latitude\u003dnull longitude\u003dnull state\u003dnull street\u003dnull zip\u003dnull]"}

但是,它导致了错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 166

我可以看到问题是由Location类对象转换为gson.toJson(solrDoc)的字符串而发生的。

然后不使用gson.toJson(solrDoc),如何将SolrDocument转换为SolrFBLocationDoc

我该怎样摆脱这个问题?

1 个答案:

答案 0 :(得分:0)

SolrFBLocationDoc班级中,location ivar属于com.restfb.types.Location,但是在您的JSON字符串中:

"location":"Location[city\u003dnull country\u003dnull latitude\u003dnull longitude\u003dnull state\u003dnull street\u003dnull zip\u003dnull]" 

表示location是一个字符串。由于SolrFBLocationDoc定义,实际上,在分号后,Gson期望“{”(即BEGIN_OBJECT)。但它找到"Location..,这是一个字符串,所以它不会解析。

正确的字符串就像:

{"id":"106377336067638","location":{"city":null, "country":null, "latitude":null, "longitude":null, "state":null, "street":null, "zip":null}}

这意味着gson.toJson(solrDoc)会为您返回location密钥的转义字符串。这可能取决于SolrDocument的定义方式。可能在该类location字段中是一个字符串。如果您可以定义SolrDocument,则可以改进此答案并确认/拒绝该假设。