2012-08-16 125 views
0

我有一個ASP.Net 3.5 Webservice(asmx),它返回看起來有效的JSON。我已經使用在線驗證器(JSONLint.com)驗證了返回的JSON,並說它是有效的。我無法弄清楚如何解析這個字符串。解析asmx在Android上返回JSON

{ 
    "d": "{\"returnType\":\"authToken\",\"returnData\":\"b1ec28b8-3fca-427a-bbce-8802fb95d94b\"}" 
} 

以下是我的代碼。

public static JSONObject DotNetJSONResponse(String raw) throws Exception { 
    JSONObject joRaw; 
    try { 
     joRaw = new JSONObject(raw); 
     JSONObject joD = joRaw.getJSONObject("d"); 
     return joD; 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return null; 
    } 

} 

回答

0

嘗試這種方式

public static JSONObject DotNetJSONResponse(String raw) throws Exception { 
JSONObject joRaw; 
    try { 
     joRaw = new JSONObject(raw); 
     String str1 = joRaw.getString("d"); 
     JSONObject joD = new JSONObject(str1); 
     return joD; 
     } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return null; 
    } 
} 
0

試試這個。在您的示例響應中,d是一個屬性,而不是JSONObject。所以必須首先解析字符串,然後將d字符串轉換爲JSONObject。

public static JSONObject DotNetJSONResponse(String raw) throws Exception { 
    JSONObject joRaw; 
    try { 
     joRaw = new JSONObject(raw); 
     String t=joRaw.getString("d"); 
     System.out.println(t);     \\< ---------- 
     JSONObject joD = new JSONObject(t); 
     return joD; 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return null; 
    } 

} 
+0

我試過你的建議。 t = {「returnType」:「authToken」,「returnData」:「b1ec28b8-3fca-427a-bbce-8802fb95d94b」} – techiegoob 2012-08-16 14:20:55

+0

最新的輸出是什麼?你有什麼異常? – 2012-08-16 14:22:59

+0

當我通過代碼,行JSONObject joD = new JSONObject(t);似乎會拋出一個異常。箭頭向下跳轉,返回null;(沒有e.printStackTrace();發生),但隨後使用正確的數據將JSON對象返回給調用行。 – techiegoob 2012-08-16 14:44:27