2012-06-02 38 views
2

我的服務器返回通過HTTP POST響應的主體JSON對象,但我得到這個錯誤時,我的應用程序試圖將字符串轉換成一個JSONObject:服務器的字符串無法轉換爲JSONObject?

06-02 09:05:34.380: E/JSONException_MyAppService(19913): org.json.JSONException: Value {"VALS":{"VAL1":"hello","VAL2":"hello2","VAL3":"hello3"}} of type java.lang.String cannot be converted to JSONObject 

它看起來像我的服務器返回一個可接受的JSON編碼字符串,但它不會轉換爲JSONObject。我甚至將服務器的響應頭的內容類型改爲「application/json」。請幫我解決這個問題,我一直在努力。

編輯 - 我使用下面的代碼:

try { 
    ResponseHandler<String> responseHandler=new BasicResponseHandler(); 
    String responseBody = client.execute(post, responseHandler); 
    JSONObject response=new JSONObject(responseBody); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Log.e("ClientProtocol_"+TAG,""+e); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Log.e("IO_"+TAG,""+e); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Log.e("JSONException_"+TAG,""+e); 
} 

我也試過伊姆蘭汗的建議:

try { 
    HttpResponse response = client.execute(post); 
    HttpEntity entity = response.getEntity(); 
    if (entity != null) { 
     String retSrc = EntityUtils.toString(entity); 
     // parsing JSON 
     JSONObject result = new JSONObject(retSrc); //Convert String to JSON Object 
     JSONArray tokenList = result.getJSONArray("VALS"); 

     JSONObject oj = tokenList.getJSONObject(0); 
     String token = oj.getString("VAL1"); 
     String token1 = oj.getString("VAL2"); 
     String token11 = oj.getString("VAL3"); 
    } 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Log.e("ClientProtocol_"+TAG,""+e); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Log.e("IO_"+TAG,""+e); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Log.e("JSONException_"+TAG,""+e); 
} 

: '(:'(

+1

請提供代碼,你在做相同和完整的日誌貓..... –

回答

4

你是如何做的呢?應該與:

JSONObject object = new JSONObject (yourString); 
+0

謝謝你的回覆。是的,我就是這樣做的: 'JSONObject response = new JSONObject(responseBody);' – user1408996

+1

你可以編輯你的問題,包括你得到迴應的代碼嗎? –

+1

我試圖解析你的迴應,它的工作。我不知道你是如何傳遞字符串,但也許你必須花費引號\「 –

2

Yo u能字符串轉換成JSON作爲:

 String str="{\"VALS\":{\"VAL1\":\"hello\",\"VAL2\":\"hello2\",\"VAL3\":\"hello3\"}}"; 
    try { 
    JSONObject result = new JSONObject(str); 
    JSONObject resultf = result.getJSONObject("VALS"); 
    Toast.makeText(this, resultf.getString("VAL1").toString(), Toast.LENGTH_SHORT).show(); 
    Toast.makeText(this, resultf.getString("VAL2").toString(), Toast.LENGTH_SHORT).show(); 
    Toast.makeText(this, resultf.getString("VAL3").toString(), Toast.LENGTH_SHORT).show(); 
} catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

     } 
+1

試試我的答案,如果你有任何問題,那麼我會引導你,謝謝 –

+1

我認爲這會失敗,因爲沒有響應中的數組(需要數組[])。 VALS應該被解析爲JSONObject。 –

+1

@ miguel.rodelas:也許你是對的,但你可以檢查http://jsonviewer.stack.hu/這裏 –

1
try { 
     response = httpclient.execute(httpget); 
     HttpEntity entity = response.getEntity(); 

     if (entity != null) { 
      String retSrc = EntityUtils.toString(entity); 
      // parsing JSON 
      JSONObject result = new JSONObject(retSrc); //Convert String to JSON Object 

      JSONObject object2 = result.getJSONObject("VALS"); 

      String token = object2.getString("VAL1"); 
      String token = object2.getString("VAL2"); 
      String token = object2.getString("VAL3"); 
     } 
} 
catch (Exception e) { 
    } 
+1

+1你是對的! –

0

我定了!這完全是我的服務器的錯。事實證明,我的服務器響應不正確。發生了什麼是Web框架中存在一個錯誤,在更新到最新版本後,問題就解決了。我猜舊版本的web框架返回了錯誤的內容類型的響應頭,或者使用了一些奇怪的編碼。

所以,這裏的每個人的Java代碼應該是100%正確的,因爲Java在這裏沒有錯。感謝您的所有努力!

Miguel的回答是最接近的解釋,所以我會接受他的回答。

相關問題