无法正确创建JSONObject

时间:2018-03-03 19:28:24

标签: android json

我想将服务器中的图像放入我的Android应用程序中。 我的第一步是:

我有来自server

的这个JSON字符串数组

{"results":"[{\"url\":\"https:\\\/\\\/augmentedandroidapp.000webhostapp.com\\\/images\\\/kamara1.jpg\"},{\"url\":\"https:\\\/\\\/augmentedandroidapp.000webhostapp.com\\\/images\\\/kamara2.jpg\"},{\"url\":\"https:\\\/\\\/augmentedandroidapp.000webhostapp.com\\\/images\\\/kamara3.jpg\"}]"}

我的应用程序中的url来自服务器,代码如下,工作正常。

  private void getURLs() {
    class GetURLs extends AsyncTask<String, Void, String> {
        ProgressDialog loading;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(GalleryTargets.this, "Loading...", "Please Wait...", true, true);
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            Toast.makeText(GalleryTargets.this,s,Toast.LENGTH_LONG).show();
            imageJSON = s;
            Log.e(LOGTAG, "Succeed Read url" + imageJSON);         
            extractJSON(imageJSON);
        }
        @Override
        protected String doInBackground(String... strings) {
            String uri = strings[0];
            BufferedReader bufferedReader = null;
            try {
                URL url = new URL(uri);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();
                bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String json;
                while ((json = bufferedReader.readLine()) != null) {
                    sb.append(json);
                }
                return sb.toString().trim();
            } catch (Exception e) {
                return null;
            }
        }
    }
    GetURLs gu = new GetURLs();
    gu.execute(newurl);
}

但是,我想用下面的方法将json提取到一个新的JSON对象中,但抛出异常,Json对象没有创建。 有什么想法发生这种异常吗? 提前谢谢!

private void extractJSON(String jsonString){
    try {
        JSONObject jsonObject = new JSONObject(jsonString);
        JSONArray jArray  = jsonObject.getJSONArray("results");
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject oneObject = jArray.getJSONObject(i);
            oneObject.getString("url");//
        }
        Log.e(LOGTAG, "JsonArray Succeed" );

    } catch (JSONException e) {
        e.printStackTrace();
        Log.e(LOGTAG, "JsonArray exception");

    }
}

2 个答案:

答案 0 :(得分:0)

  

json上有一个错误..&#34;结果&#34;:一定不能   引号

这是正确的

{"results":[{\"url\":\"https:\\\/\\\/augmentedandroidapp.000webhostapp.com\\\/images\\\/kamara1.jpg\"},{\"url\":\"https:\\\/\\\/augmentedandroidapp.000webhostapp.com\\\/images\\\/kamara2.jpg\"},{\"url\":\"https:\\\/\\\/augmentedandroidapp.000webhostapp.com\\\/images\\\/kamara3.jpg\"}]}

答案 1 :(得分:0)

而不是JSONArray jArray = jsonObject.getJSONArray("results"); 试试JSONArray jArray = new JSONArray (jsonObject.getString("results"));

您要求提供json数组,但它是一个字符串。