2

我的服务器通过 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);
}

:'( :'(

4

4 回答 4

4

你怎么样?它应该与:

JSONObject object = new JSONObject (yourString);
于 2012-06-02T19:10:05.983 回答
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();
}

        }
于 2012-06-02T19:31:56.300 回答
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) {
  }
于 2012-06-02T20:02:15.867 回答
0

我修好了它!这完全是我的服务器的错。原来我的服务器响应不正确。发生的事情是 Web 框架中存在错误,更新到最新版本后,问题自行解决。我猜旧版本的 Web 框架返回了不正确的内容类型响应标头,或者使用了一些奇怪的编码。

所以这里大家的Java代码应该是100%正确的,因为这里Java没有错。感谢您的所有努力!

米格尔的回答是最接近的解释,所以我会接受他的回答。

于 2012-06-03T04:03:31.557 回答