【问题标题】:Android: Error Converting string to JSONObjectAndroid:将字符串转换为 JSONObject 时出错
【发布时间】:2014-04-28 18:23:15
【问题描述】:

我正在尝试以 JSON 格式从我的数据库中检索数据,并将该结果设置为 JSONObject,然后显示在文本视图中。

代码如下:

private class ShowDBActivity3 extends AsyncTask<Void, Void, String>{

    protected String doInBackground(Void... voids){
        String s = "";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

        nameValuePairs.add(new BasicNameValuePair("username", username));

        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("URL");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
            Log.e("pass 1", "connection success ");
        } catch (Exception e) {
            Log.e("Fail 1", e.toString());
            Toast.makeText(getApplicationContext(), "Invalid IP Address",
                    Toast.LENGTH_LONG).show();
        }

        try {
            BufferedReader reader = new BufferedReader
                    (new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
            Log.e("pass 2", "connection success ");
        } catch (Exception e) {
            Log.e("Fail 2", e.toString());
        }


        try {
            Log.e("This is the result: ", result.toString());
            JSONObject jArray = new JSONObject(result);
            String title = jArray.getString("title");
            String rating = jArray.getString("rating");
            String username = jArray.getString("username");

            s = "Movie: " + title + "\n" +
                "Rating: " + rating + "\n";

            return s;


        } catch (Exception e) {
            Log.e("Fail 3", e.toString());
        }
        return s;
    }

    protected void onPostExecute(String s){
        show.setText(s);
    }
}

这是返回的结果:

结果如下:﹕[{"0":"16","id":"16","1":"绿巨人","title":"绿巨人","2":" 7","rating":"7","3":"tlong3","username":"tlong3"},{"0":"19","id":"19","1":"无敌浩克","title":"无敌浩克","2":"3","rating":"3","3":"tlong3","username":"tlong3"},{" 0":"20","id":"20","1":"Testtt","title":"Testtt","2":"6","rating":"6","3" :"Tlong3","用户名":"Tlong3"}]

...由于某种原因无法转换为 JSONObject。这是错误:

04-28 13:14:25.372 20099-20830/com.android.movi​​es E/Fail 3: org.json.JSONException: Value [{"3":"tlong3","id":"16", "2":"7","username":"tlong3","title":"绿巨人","1":"绿巨人","0":"16","rating":"7"} ,{"3":"tlong3","id":"19","2":"3","username":"tlong3","title":"无敌浩克","1":"The不可思议的绿巨人","0":"19","rating":"3"},{"3":"Tlong3","id":"20","2":"6","username": org.json.JSONArray 类型的 "Tlong3","title":"Testtt","1":"Testtt","0":"20","rating":"6"}] 无法转换为 JSONObject

【问题讨论】:

    标签: android mysql json


    【解决方案1】:

    很清楚,logcat 也显示 JSONArray 无法转换为 JSONObject。因此,您收到的字符串是 JSONArray 而不是对象,您正在尝试将其解析为导致错误的 JSONObjct。

    如果您还不知道,这是给您的。 JSONArray 可以被[ Your JSONArray ] 识别,JSONObject 可以被{ Your JSONObject } 识别

    您可以使用this 工具来验证您的 JSON 响应并确定它的格式。根据你的 JSONresponse 它看起来像[ {***} {***} {***} ] 这意味着你有一个 JSONObjects 的 JSONArray 来正确解析它你需要先将它转换为 JSONArray 然后申请循环来遍历它的每个对象。 我已经回答了类似的问题herehere,你应该检查这些并尝试类似的问题。

    PS:如果您正在开发服务器脚本,那么我建议您编写服务器端代码,以便您的响应始终是 JSONObject 而不是 JSONArray,但这仅适用于您同时是客户端和服务器的开发人员边。如果您需要帮助,请向我提问。

    【讨论】:

    • 谢谢!对于任何感兴趣的人,这是我修复它的方法。 JSONArray jArray = new JSONArray(result); s = ""; for(int i = 0; i
    • 如果它对您有所帮助,请考虑投票或接受答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2012-12-27
    • 2017-01-27
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多