【问题标题】:org.json.JSONObject cannot be converted to JSONArray in androidorg.json.JSONObject 无法在 android 中转换为 JSONArray
【发布时间】:2021-11-20 00:39:53
【问题描述】:

当我在本地主机中尝试时,它可以找到。这是我的本地主机提供的 JSON。

这个网址出错了http://api.androidhive.info/contacts/

         [{
     "id": "1",
     "first_name": "man",
     "last_name": "woman",
     "username": "man",
     "password": "4f70432e6369
70de9929bcc6f1b72412",
     "email": "man@gmail.com",
     "url": "http:\/\/localhost\/adchara1\/"
 }, {
     "id": "6",
     "first_name": "first",
     "last_name": "Last 
Name",
     "username": "user",
     "password": "1a1dc91c907325c69271ddf0c944bc72",
     "email": "0",
     "url": "ht
tp:\/\/api.androidhive.info\/contacts\/"
 }, {
     "id": "7",
     "first_name": "1",
     "last_name": "2",
     "username": "us45",
     "password": "33d8f54e33896a5722
7b18642979e558",
     "email": "first@gmail.com",
     "url": "http:\/\/ugirusgiarto.wordpress.com\/2011\
/10\/27\/json-php-mysql-with-asynctask-progressdialog\/"
 }, {
     "id": "9",
     "first_name": "First Name",
     "last_name": "Last 
Name",
     "username": "Username",
     "password": "dc647eb65e6711e155375218212b3964",
     "email": "woman@gm
ail.com",
     "url": "http:\/\/mobile.cs.fsu.edu\/parse-json-objects-in-asynctask\/"
 }]

x

主活动

public class MainActivity extends Activity {
    TextView text_1, text_2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new task().execute();
    }

    class task extends AsyncTask<String, String, Void> {
        private ProgressDialog progressDialog = new ProgressDialog(
                MainActivity.this);
        InputStream is = null;
        String result = "";

        protected void onPreExecute() {
            progressDialog.setMessage("Download data...");
            progressDialog.show();
            progressDialog.setOnCancelListener(new OnCancelListener() {
                public void onCancel(DialogInterface arg0) {
                    task.this.cancel(true);
                }
            });
        }

        @Override
        protected Void doInBackground(String... params) {
//          String url_select = "http://192.168.10.111/adchara1/";
             String url_select = "http://api.androidhive.info/contacts/";

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url_select);

            ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();

            try {
                httpPost.setEntity(new UrlEncodedFormEntity(param));

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

                // read content
                is = httpEntity.getContent();

            } catch (Exception e) {

                Log.e("log_tag", "Error in http connection " + e.toString());
            }
            try {
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(is));
                StringBuilder sb = new StringBuilder();
                String line = "";
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();

            } catch (Exception e) {
                // TODO: handle exception
                Log.e("log_tag", "Error converting result " + e.toString());
            }

            return null;

        }

        protected void onPostExecute(Void v) {

            // ambil data dari Json database
            try {
                JSONArray Jarray = new JSONArray(result);
                for (int i = 0; i < Jarray.length(); i++) {
                    JSONObject Jasonobject = null;
                    text_1 = (TextView) findViewById(R.id.txt1);
                    Jasonobject = Jarray.getJSONObject(i);

                    // get an output on the screen
                    String id = Jasonobject.getString("id");
                    String name = Jasonobject.getString("name");
                    String email = Jasonobject.getString("email");
                    String address = Jasonobject.getString("address");
                    String gender = Jasonobject.getString("gender");
                    text_1.append("\n" + id + "\t\t" + name + "\t\t\t"
                            + email + "\t\t\t\t" + address + "\t\t\t\t" + gender
                            + "\t\t\t\t" + "\n");

                }
                this.progressDialog.dismiss();

            } catch (Exception e) {
                // TODO: handle exception
                Log.e("log_tag", "Error parsing data " + e.toString());
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

错误

Error parsing data org.json.JSONException: Value {
    "contacts": [{
        "id": "c200",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "ravi@gmail.com",
        "name": "Ravi Tamada"
    }, {
        "id": "c201",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "johnny_depp@gmail.com",
        "name": "Johnny Depp"
    }, {
        "id": "c202",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "leonardo_dicaprio@gmail.com",
        "name": "Leonardo Dicaprio"
    }, {
        "id": "c203",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "john_wayne@gmail.com",
        "name": "John Wayne"
    }, {
        "id": "c204",
        "gender": "female",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "angelina_jolie@gmail.com",
        "name": "Angelina Jolie"
    }, {
        "id": "c205",
        "gender": "female",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "dido@gmail.com",
        "name": "Dido"
    }, {
        "id": "c206",
        "gender": "female",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "adele@gmail.com",
        "name": "Adele"
    }, {
        "id": "c207",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "hugh_jackman@gmail.com",
        "name": "Hugh Jackman"
    }, {
        "id": "c208",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "will_smith@gmail.com",
        "name": "Will Smith"
    }, {
        "id": "c209",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "clint_eastwood@gmail.com",
        "name": "Clint Eastwood"
    }, {
        "id": "c2010",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "barack_obama@gmail.com",
        "name": "Barack Obama"
    }, {
        "id": "c2011",
        "gender": "female",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "kate_winslet@gmail.com",
        "name": "Kate Winslet"
    }, {
        "id": "c2012",
        "gender": "male",
        "phone": {
            "office": "00 000000",
            "home": "00 000000",
            "mobile": "+91 0000000000"
        },
        "address": "xx-xx-xxxx,x - street, x - country",
        "email": "eminem@gmail.com",
        "name": "Eminem"
    }]
}
of type org.json.JSONObject cannot be converted to JSONArray

【问题讨论】:

  • 我建议尝试使用您知道是有效 JSONArray 的东西,以确保您的代码正常工作,然后检查这是否实际上是有效的 JSONArray。您可以使用 Google Chrome 的“JSON Formatter”扩展等工具来帮助您以缩进、格式化的方式读取 JSON

标签: android json url


【解决方案1】:

你可以试试这个:

JSONObject object = new JSONObject(result);
JSONArray Jarray  = object.getJSONArray("contacts");

for (int i = 0; i < Jarray.length(); i++) 
{
   JSONObject Jasonobject = Jarray.getJSONObject(i);
}

【讨论】:

    【解决方案2】:
            // getting JSON string from URL
            JSONObject json = jParser.getJSONFromUrl(uri.toString());
    
            try {
                //Obter objeto JSON
                clientesJSONArray = json.optJSONArray(Clientes.TABELA);
    
                //Se for 1 objeto não virá em JSONArray - Os objetos em JSON são separados
                //por colchetes [] - No caso de um objeto, não será array e sim um simples
                //objeto em JSON
                if(clientesJSONArray==null){
                    // means item is JSONObject instead of JSONArray
                    //json = obj.optJSONObject("offerRideResult");
                    JSONObject obj = json.getJSONObject(Clientes.TABELA);
    
                    Clientes oCliente = new Clientes();
                    oCliente.setCliente(obj.getString(Clientes.CLIENTE));
                    oCliente.setCod_cliente(obj.getInt(Clientes.COD_CLIENTE));
                    oCliente.setE_mail(obj.getString(Clientes.E_MAIL));
                    oCliente.setUsuario(obj.getString(Clientes.USUARIO));
                    oCliente.setUsuario(obj.getString(Clientes.SENHA));
    
    
                    clientesList.add(oCliente);
    
                }else{
                    // Mais de um objeto JSON separado por colchetes [] - JSONArray ao invés JSONObject
                    for (int i = 0; i < clientesJSONArray.length(); i++) {
    
                        JSONObject obj = clientesJSONArray.getJSONObject(i);
                        Clientes oCliente = new Clientes();
                        oCliente.setCliente(obj.getString(Clientes.CLIENTE));
                        oCliente.setCod_cliente(obj.getInt(Clientes.COD_CLIENTE));
                        oCliente.setE_mail(obj.getString(Clientes.E_MAIL));
                        oCliente.setUsuario(obj.getString(Clientes.USUARIO));
                        oCliente.setUsuario(obj.getString(Clientes.SENHA));
    
    
                        clientesList.add(oCliente);
    
    
                    }
                }
    

    【讨论】:

      【解决方案3】:

      试试这个

      JSONObject Jarray = new JSONObject(result);
      

      而不是

      JSONArray Jarray = new JSONArray(result);
      

      接下来

      JSONArray Jarray = Jasonobject.getJSONArray("contacts");
      

      for 循环继续

      从网址下载图片

      将 URL 传递给此特定方法,您可以将图像下载到 gridview

      private void downloadImage(String urlStr) {
          final String url = urlStr;
                  InputStream in = null;
                  Message msg = Message.obtain();
                  msg.what = 1;
                  try {
                      in = openHttpConnection(url);
                      bitmap = BitmapFactory.decodeStream(in);
                      Bundle b = new Bundle();
                      b.putParcelable("bitmap", bitmap);
                      msg.setData(b);
                      in.close();
      
                  } catch (Exception e1) {
                      e1.printStackTrace();
                  }           
      }
      
      private InputStream openHttpConnection(String urlStr) {
          InputStream in = null;
          int resCode = -1;
      
          try {
              URL url = new URL(urlStr);
              URLConnection urlConn = url.openConnection();
      
              if (!(urlConn instanceof HttpURLConnection)) {
                  throw new IOException ("URL is not an Http URL");
              }
      
              HttpURLConnection httpConn = (HttpURLConnection)urlConn;
              httpConn.setAllowUserInteraction(false);
              httpConn.setInstanceFollowRedirects(true);
              httpConn.setRequestMethod("GET");
              httpConn.connect();
      
              resCode = httpConn.getResponseCode();                
              if (resCode == HttpURLConnection.HTTP_OK) {
                  in = httpConn.getInputStream();                                
              }        
          } catch (MalformedURLException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
          return in;
      }
      

      【讨论】:

      • 这不是主要问题。主要问题,我想在json中使用路径图像。我希望我的 imageview 视图图像使用来自 json 的图像路径。检查上面的链接
      • 这就是我想要的。 stackoverflow.com/questions/12739824/…
      【解决方案4】:

      url (http://api.androidhive.info/contacts/) 返回一个 JSON 对象而不是 JSON 数组...

      这里:

      JSONArray Jarray = new JSONArray(result);
          for (int i = 0; i < Jarray.length(); i++) {
              JSONObject Jasonobject = null;
      

      您假设结果是一个 json 数组。如果你这样做,它会起作用:

      JSONObject Jasonobject = new JSONObject(result);
      JSONArray Jarray = Jasonobject.getJSONArray("contacts");
      
      for (int i = 0; i < Jarray.length(); i++) { ...}
      

      【讨论】:

        【解决方案5】:

        错误表明您的 JSON 是 JSON Object 而不是 JSON Array

        改变:

        JSONArray Jarray = new JSONArray(result)
        

        JSONObject someObject = new JSONObject(result);
        JSONArray Jarray = Jarray.getJSONArray("contacts");
        

        【讨论】:

          【解决方案6】:

          尝试以下转换:

                   JSONObject js= new JSONObject(yourjsonobjectvalue);
                   JSONArray jA = js.getJSONArray("String value");
          

          【讨论】:

            猜你喜欢
            • 2016-06-07
            • 1970-01-01
            • 2015-08-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多