2013-11-26 270 views
0

JSON響應應該是這樣的:無法解析JSON響應

「{\」 syncrequest \ 「:{\」 用戶\ 「:{\」 @的xmlns:XSI \ 「:\」 http://www.w3.org/2001/XMLSchema-instance \ 「\ 」活性\「:\ 」真\「,\ 」basedataset \「:\ 」假\「},\ 」syncversion \「:\ 」89 \「,\ 」syncdata \「:[{\」 操作:「INSERT OR REPLACE \」,\「table \」:\「WSInformation \」,\「rows \」:[{\「WS_ID \」:\「71 \」,\「WS_ParentOwn \」 :null,\「WS_Notes \」:\「Notes \\」for \\「VistaStore Fleet \\」save \「,\」CC_ID \「:\」1 \「,\」Record_Instance \「:\」1 \「,\」Record_LastModified \「:\」2013-11-26T07:51:35.203 \「}]}]}}」

來自服務器的字符串格式的響應。當我使用

 JsonObject jObject =new JsonObject(string); 

其得到錯誤像串未終止字符轉換上面的字符串JSON格式。

任何機構可以幫助我解決上述問題。

由於事先

編輯:

從服務器來的響應是在輸入流的形式。

所以,我用了使用功能的輸入流轉換爲字符串:

 IOUtils.readStream(instream); 

然後響應字符串想:

響應 =

「{\ 「syncrequest \」:{\「user \」:{\「@ xmlns:xsi \」:\「http://www.w3.org/2001/XMLSchema-instance \」,\「active \」:\「true \」,\「basedataset \」:\「 「},\」 syncversion \ 「:\」 89 \ 「\ 」syncdata \「:[{\ 」操作\「:\」 INS ERT 或 REPLACE \「,\」table \「:\」WSInformation \「,\」rows \「:[{\」WS_ID \「:\」71 \「,\」WS_ParentOwn \「:null,\」 \ \「VistaStore Fleet \\」save \「,\」CC_ID \「:\」1 \「,\」Record_Instance \「:\」1 \「,\」WS_Notes \ Record_LastModified \ 「:\」 2013-11-26T07:51:35.203 \ 「}]}]}}」

通過使用以下函數來形成JSON對象,我除去雙引號。

res = response.substring(1,response.length() - 1);

並使用下面的函數刪除字符串中的雙引號。

res = response.replace(「\\」「,」\「」);

+0

發佈你的http連接代碼 – SathishKumar

+0

你爲什麼要逃脫蜱?解析器不能處理這個,因爲這不是有效的JSON。 – Baschi

+0

是的,對此+1,我不在我的JSON上使用「\」並且一切正常 – Poutrathor

回答

0

不要在轉換中使用JsonObject。

 JSONObject jObject = new JSONObject(response); 
    JSONArray jArray = jObject.getJSONArray("syncrequest"); 

import this org.json.JSONObject;

不是com.google.gson。JSONObject的;

+0

只導入org.json.JSONObject .... –

+0

以及導入JSONArray太:) – Poutrathor

+0

我們正在導入所有必需項。這裏的問題是,當字符串包含雙引號,然後解析失敗json響應。 –

0

我認爲這不是一個有效的JSON對象。

+0

編輯了這個問題。可以請你看看.. –

+0

也許你必須指定類似這樣的閱讀流 - setContentType(「應用程序/ JSON」)? – none

+0

也許這會幫助你 - http://stackoverflow.com/a/13267720/1375027 – none