无法反序列化对象 - 预期BEGIN_OBJECT但在第1行第1列是STRING

时间:2014-06-15 19:57:24

标签: android gson json-deserialization

首先让我说,我在发帖之前已经搜索过,但是找不到答案。

我无法反序列化JSON。它是一个有效的JSON(在http://jsonlint.com/检查) 它是用servicestack json序列化程序生成的。

我正在

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1

这是我的服务器发送的JSON:

{
    "artistName": "",
    "pathInfo": "C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3",
    "indexPos": 0,
    "messageType": "song"
}

如何收到:

{"artistName":"","pathInfo":"C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3","indexPos":0,"messageType":"song"}

以下是保留它的对象:

public class Song {

    private String artistName;
    private String albumName;
    private String titleName;
    private String pathInfo;
    private String indexPos;
    private String messageType;


    public Song() {
    }

2 个答案:

答案 0 :(得分:3)

好的,我最终自己找到了答案,但感谢所有支持和帮助。

这是接收JSON对象并使用GSON启动反序列化的代码。

 Map messageObjMap = new Gson().fromJson(message, Map.class);
 String type = messageObjMap.get("messageType").toString();

 switch (type) {
     case "song":
         try {
             Gson gson = new GsonBuilder().create();
             Song song = gson.fromJson(message, Song.class);
             ...
             ...
         } ...
     ...
 }

"消息"被认为是整个JSON。相反,它只是从JSON中解析出来的一个密钥,这就是deserializtion无法正常工作的原因。希望能帮到某人

答案 1 :(得分:0)

String json = "{\"artistName\":\"\",\"pathInfo\":\"C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3\",\"indexPos\":0,\"messageType\":\"song\"}";
final JSONObject jsonObject = new JSONObject(json);
String path = jsonObject.getString("pathInfo");

我还没有使用Gson,但尝试这个并告诉我它是否有效