2012-12-01 20 views
0

我得到这个错误,而试图创建一个JSONObject定义字符串的Android无法解析从服务器检索的JSON字符串中的Android,但可以解析为Android的

java.lang.String类型的org.json.JSONException: Value {"0" : [{"original" : "car", "translation" : "araba"}]}不能转换为JSONObject

如果我使用从服务器使用HttpClient返回的字符串,我会得到上述错误。

如果我把上面的同一个字符串,并定义一个静态字符串,并解析它很好。当使用HttpClient来检索JSON时,是否有一些解码或编码问题需要解决?

我手动建立JSON字符串在C#作为一个测试,在这里它返回

return "{\"0\" : [{\"original\" : \"car\", \"translation\" : \"araba\"}]}"; 

是代码

HttpClient httpClient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 
     String s = "http://10.0.2.2:63200/OnlineArabic/api/datasen"; 
     HttpGet httpGet = new HttpGet(s); 

    HttpResponse response = httpClient.execute(httpGet, localContext); 
    HttpEntity entity = response.getEntity(); 
    InputStream instream = entity.getContent(); 

    BufferedReader reader = new BufferedReader(new InputStreamReaderinstream , "UTF-8"),8); 
     StringBuilder sb = new StringBuilder(); 

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


     String result= convertStreamToString(instream);    
    String jsonString = sb.toString(); 
    JSONObject jObject = new JSONObject(jsonString); 

任何想法?

这里是日志:

12-01 13:48:08.156: W/System.err(22947): org.json.JSONException: Value {"0" : [{"original" : "car", "translation" : "araba"}]} of type java.lang.String cannot be converted to JSONObject 
12-01 13:48:08.160: W/System.err(22947): at org.json.JSON.typeMismatch(JSON.java:107) 
12-01 13:48:08.160: W/System.err(22947): at org.json.JSONObject.<init>(JSONObject.java:158) 
12-01 13:48:08.160: W/System.err(22947): at org.json.JSONObject.<init>(JSONObject.java:171) 
12-01 13:48:08.170: W/System.err(22947): at com.ls.audioplayer.MainActivity.call(MainActivity.java:137) 
12-01 13:48:08.170: W/System.err(22947): at com.ls.audioplayer.MainActivity$1.onClick(MainActivity.java:294) 
12-01 13:48:08.180: W/System.err(22947): at android.view.View.performClick(View.java:2408) 
12-01 13:48:08.180: W/System.err(22947): at android.view.View$PerformClick.run(View.java:8816) 
12-01 13:48:08.190: W/System.err(22947): at android.os.Handler.handleCallback(Handler.java:587) 
12-01 13:48:08.190: W/System.err(22947): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-01 13:48:08.221: W/System.err(22947): at android.os.Looper.loop(Looper.java:123) 
12-01 13:48:08.221: W/System.err(22947): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-01 13:48:08.221: W/System.err(22947): at java.lang.reflect.Method.invokeNative(Native Method) 
12-01 13:48:08.231: W/System.err(22947): at java.lang.reflect.Method.invoke(Method.java:521) 
12-01 13:48:08.231: W/System.err(22947): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-01 13:48:08.240: W/System.err(22947): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-01 13:48:08.240: W/System.err(22947): at dalvik.system.NativeStart.main(Native Method) 
+0

1.日志请 2.尝试一个在线json格式器/转换器来检查你的json – pvllnspk

+0

我已经添加了日志 – stack

+0

你的Android代码在哪里创建JSONObject? – mbwasi

回答

2

确保服务器正在发送UTF-8编码数据。另请参阅在开始/结尾处没有新行字符。

Eclipse的logcat工具将帮助您找到这些特殊字符。命令行上的Logcat有时不会呈现特殊字符。

+0

服务器有额外的数据,因此我清除了流并仅发送了json – stack

0

我唯一的是,虽然你在某种程度上破坏字符串,因为它与你的HTTPGET代码进来,我会建议你使用的HTTP请求,如EasyHttpClient图书馆,只是在项目中创建该类然后,而不是所有的代码,你必须做

EasyHttpClient client = new EasyHttpClient(); 
String jsonString = client.get("http://10.0.2.2:63200/OnlineArabic/api/datasen"); 

然后看看你是否可以把在一个对象。我不能测试代码不幸的是我只有安装在这里的Android 4.2。

0

在代码中,

的BufferedReader读者=新的BufferedReader(新InputStreamReaderinstream, “UTF-8”),8);

改变这对

的BufferedReader读者=新的BufferedReader(新的InputStreamReader(插播, “UTF-8”),8);