2014-10-01 92 views
0

这是我收到的JSON:的Json反序列化 - 预期BEGIN_OBJECT但STRING

{ 
    "data": "{\"keystring\": \"ag5zfmNvcGFya3NlcnZlcnIUCxIHQ29tbWVudBiAgICAusaBCgw\"}", 
    "isSucceed": true, 
    "error": "" 
} 

这是类和这是应该的代码反序列化它:

public class ServerResponse { 

    private boolean isSucceed; 
    private String error; 
    private JSONObject data; 
} 

//this is the code line responsible for deserialization, responseJson = the JSON above 
ServerResponse response = gson.fromJson(responseJson, ServerResponse.class); 

对于某些原因我得到JsonSyntaxException:预期的BEGIN_OBJECT,但是STRING,我猜是与数据对象ServerResponse举行,但我收到它作为一个有效的JSON ...

任何想法?

回答

1

data

private JSONObject data; 

JSONObject型。但是您收到的值为相应的键值对

"data": "{\"keystring\": \"ag5zfmNvcGFya3NlcnZlcnIUCxIHQ29tbWVudBiAgICAusaBCgw\"}", 

是JSON字符串。 JSON字符串旨在映射到Java String。所以它期望一个JSON对象,但收到一个JSON字符串。

您可以编写并注册属于自己的TypeAdapter,将JSON字符串转换为Java JSONObject。或者,您可以将字段更改为String类型,并在需要时将其转换为JSONObject

+1

我该如何编写我自己的TypeAdapter? – Jjang 2014-10-01 16:11:46

+1

@Jjang这是一个Gson类。 [这里是一个例子。](http://www.javacreed.com/gson-typeadapter-example/) – 2014-10-01 16:14:06

+0

TypeAdapter绝对是这种方式。 – dharms 2014-10-01 16:25:17

相关问题