2012-06-02 36 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的回答是最接近的解释,所以我会接受他的回答。

相关问题