我的服务器通过HTTP POST响应的主体返回一个JSON对象,但是当我的应用程序尝试将字符串转换为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);
}
我也尝试过imran khan的建议:
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);
}
:'(:'(
答案 0 :(得分:4)
你好吗?它应该与:
一起使用JSONObject object = new JSONObject (yourString);
答案 1 :(得分:2)
您可以将字符串转换为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();
}
}
答案 2 :(得分: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) {
}
答案 3 :(得分:0)
我固定了它!这完全是我服务器的错。原来我的服务器响应不正确。发生了什么事情是Web框架中有一个错误,在更新到最新版本后,问题解决了。我猜测旧版本的Web框架返回了错误的内容类型响应头,或使用了一些奇怪的编码。
所以每个人的Java代码都应该100%正确,因为Java在这里没有错。感谢所有的努力!
Miguel的答案是最接近的解释,所以我会接受他的回答。