Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将服务器中的字符串转换为JSONObject?_Java_Android_Json_Http - Fatal编程技术网

Java 无法将服务器中的字符串转换为JSONObject?

Java 无法将服务器中的字符串转换为JSONObject?,java,android,json,http,Java,Android,Json,Http,我的服务器通过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

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

:'(:'(

你是怎么做的?它应该与:

JSONObject object = new JSONObject (yourString);

您可以将字符串转换为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();
}

        }

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

所以这里每个人的Java代码都应该是100%正确的,因为Java在这里并没有错。谢谢你们的努力


Miguel的回答是最贴切的解释,所以我接受他的回答。

你能编辑你的问题,包括你得到回答的代码吗?我已经尝试解析你的回答,它正在工作。我不知道你是如何传递字符串的,但也许你必须替换引号\"在我看来,您的代码看起来是正确的。在转换为JSONObject之前记录responseBody字符串会很有趣,以查看您得到了什么。我认为问题出在字符串中。可能有一些引号。您可以尝试将您得到的字符串作为响应登录到Eclipse并复制到此处吗?我尝试使用您的响应和它可以工作:JSONObject object=new JSONObject(“{“VALS\”:{“VAL1\”:“hello\”,“VAL2\”:“hello2\”,“VAL3\”:“hello3\”}”);让我们提供您执行相同操作和完整日志cat的代码……尝试我的答案,如果您有任何问题,我将指导您,我认为这将失败,因为响应中没有数组(对于数组)[]是必需的)。VAL应该被解析为JSONObject。@miguel.rodelas:也许你是对的,但你可以在这里检查我尝试了,但它给出了完全相同的错误消息(我保留了以前代码中相同的catch子句)@user1408996:至少在Android中,它是一个JSONObject,具有VAL1、VAL2和VAL3作为字符串属性,100%确定。我刚刚在Eclipse上尝试过它,使用JSONArray您会得到一个JSONException。
      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();
}

        }
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) {
  }