2013-07-23 106 views
2

嗨我在2.3中遇到了Android JSON解析器的问题,在4.0>中一切正常。我试图把“测试”放在我的所有JSON字段中,但问题仍然存在。org.json.JSONException:无法将类型java.lang.String的值转换为JSONObject

这里是我的代码:

URL url = new URL(c.getString(R.string.url_ws) + url_ws); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setDoOutput(true); 
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
connection.setRequestMethod("POST"); 
OutputStreamWriter request = new OutputStreamWriter(connection.getOutputStream()); 
request.write("&test=test"); 
request.flush(); 
request.close(); 


String line; 
InputStreamReader isr = new InputStreamReader(connection.getInputStream()); 
BufferedReader reader = new BufferedReader(isr); 
StringBuilder sb = new StringBuilder(); 

while ((line = reader.readLine()) != null){ 
    sb.append(line + "\n"); 
} 
String json = sb.toString().trim(); 
try { 
    JSONObject obj = new JSONObject(json); 
} catch (JSONException e) { 
    e.printStackTrace(); 
    Log.d(Tools.TAG+"/debug JSONException", e.toString()); 
    return null; 
} 

这里是我的例外

debug JSONException(4184): org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 

我看到“价值”之间的双重空间“的”,所以我想这个问题是一个空字符串,但我不明白。

谢谢。

编辑

这是我JSON一个编码错误,

char a = json.substring(0, 1).charAt(0); 
int ascii = (int)a; 
Tools.myLog(">"+ascii+"<"); 

我发现65279字符

SOLUTION

Why is &#65279; appearing in my HTML?

编码UTF-8出BOM。

+0

http://stackoverflow.com/questions/17792779/what-is-the-error-表示功能于androidjson误差的解析数据-ORG-JSON-jsonexcep/17793283#17793283。类似!。发布你的json。 – Raghunandan

+0

JSONArray obj = new JSONArray(json);使用这个而不是JSONObject obj = new JSONObject(json); – Giant

+0

我的JSON是不是数组: { “bHasError”:假的, “sSessionId”: “5e10be14c408732179aa4731899882fd”, “iMembreId”:7510064 “iCurrentDate”:1374565720 .... –

回答

1
while ((line = reader.readLine()) != null){ 
    sb.append(line + "\n"); 
} 

而是试图

while ((line = reader.readLine()) != null){ 
    sb.append(line); 
    json = sb.toString().substring(0, sb.toString().length()-1); 
} 

按照此方法用于获取JSON对象:

public JSONObject getJSONObjFromUrl(String url, List<NameValuePair> params) {  
      System.out.println("url:: "+url); 
      System.out.println("params:: "+ params +" " +params.get(0)); 
      // Making HTTP request 
      try { 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(
         is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line); 
       } 
       is.close(); 

       json = sb.toString().substring(0, sb.toString().length()-1); 
       // Log.e("JSON:: ", json); 
      } catch (Exception e) { 
       Log.e("Buffer Error", "Error converting result " + e.toString()); 
      } 

      // try parse the string to a JSON object 
      try { 
       jObj = new JSONObject(json); 
      } catch (JSONException e) { 
       Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      } 

      // return JSON String 

      return jObj; 

     } 
+0

我删除了\ n,但你的诡计与子字符串发生错误:debug JSONException(4461):org.json.JSONException:未终止的对象在字符242的 –

+2

去到站点http://json.parser.online.fr/ 。检查你的JSON是否正确 –

+0

尼斯非常好的网站,我发现它是我的JSON中的[“”]之间的空间的错误,我更新我的问题。 TYVM! –

相关问题