2014-06-15 146 views
3

首先讓我說,我已經搜索發佈之前,只是無法找到答案。可反序列化對象 - 預期的BEGIN_OBJECT,但STRING在第1行1

我在解序列化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() { 
    } 
+0

你可以請張貼JSON,因爲你得到它完全沒有格式化,也沒有修改 –

+0

當然,添加到帖子 – Yosi199

+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解析出來的一個關鍵,這就是反序列化不起作用的原因。希望能幫助別人

+1

偉大的工作:),謝謝你的回答,現在我學會了Gson :) –

+0

是的Gson是非常酷和清潔,然後自己解析元素 – Yosi199

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試試這個,讓我知道,如果它

+0

謝謝你的幫助,但我想用Gson來解析這個JSON字符串到一個完整的對象。你的方式沒有使用Gson,並且只能從JSON獲取一個密鑰。 – Yosi199

+0

你可以單獨獲取其他人,然後將它們分配給Model類 –

+0

如果我不想弄清楚這一點,但是由於Gson庫會爲我們做這件事,那就是 - 將值映射到對象字段然後我想用 – Yosi199

相關問題