org.json.JSONArray无法转换为JSONObject

我是新来的JSON和我正在得到的例外:

org.json.JSONArray cannot be converted to JSONObject在try部分本身的第一行。

请帮我删除这个。 这是我的代码:

 try { JSONObject json = new JSONObject(strResponse); //Get the element that holds the internship ( JSONArray ) JSONArray name = json.names(); JSONArray internships = json.toJSONArray(name); //Loop the Array for(int i=0;i < internships.length();i++) { Log.e("Message","loop"); HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = internships.getJSONObject(i); map.put("id", String.valueOf("id")); map.put("title", "Title :" + e.getString("title")); map.put("company", "Company : " + e.getString("company")); map.put("category", "Category : " + e.getString("category")); mylist.add(map); } } catch(JSONException e) { Log.e("log_tag", "Error parsing data "+e.toString()); } 

这是我从我的PHP文件得到的JSON

 [ { "id": "31", "title": "Business Development - Executive", "company": "Indidelights", "category": "Sales and Business Development" }, { "id": "40", "title": "Business Development - Ecommerce MH", "company": "Ram Gopal & Co", "category": "Sales and Business Development" }, { "id": "41", "title": "Sales and Business development intern", "company": "Esanchalak", "category": "Sales and Business Development" }, { "id": "42", "title": "Purchase Executive", "company": "Winni.in", "category": "Marketing" }, { "id": "43", "title": "Marketing Intern", "company": "Walkover Web Solutions Pvt. Ltd.", "category": "Marketing" }, { "id": "44", "title": "Marketing Intern", "company": "SkillKindle Learning Pvt Ltd", "category": "Marketing" }, { "id": "45", "title": "Graphic Designer", "company": "Stylopa", "category": "Graphic Design / Art Work" }, { "id": "46", "title": "Graphic Designer", "company": "LycondonFX", "category": "Graphic Design / Art Work" }, { "id": "47", "title": "Web Designer", "company": "Xapify LLC", "category": "Software" }, { "id": "48", "title": "Web Designer (Frontend)", "company": "gotrademark.in", "category": "Web Design and Development" }, { "id": "49", "title": "Content Writing Intern", "company": "National Entrepreneurship Network", "category": "Content Writing / Journalism" }, { "id": "50", "title": "Content Writing Intern", "company": "Pragmatum Training Pvt Ltd", "category": "Content Writing / Journalism" }, { "id": "51", "title": "HR Intern", "company": "GATI Kintetsu Express Pvt Ltd", "category": "HR / Recruitment" }, { "id": "52", "title": "Pharma Intern", "company": "Qlinics Health Care Pvt Ltd", "category": "BioTechnology / Pharma" }, { "id": "53", "title": "Android Developer", "company": "InoXapps Mobile Solutions Pvt Ltd", "category": "Mobile App Development" }, { "id": "54", "title": "Mobile App developer", "company": "RV Media Inc", "category": "Mobile App Development" }, { "id": "55", "title": "Electronics Intern", "company": "GA SOFTWARE TECHNOLOGIES PVT LTD", "category": "Electronics Engineering" } ] 

Solutions Collecting From Web of "org.json.JSONArray无法转换为JSONObject"

这个

 JSONObject json = new JSONObject(strResponse); // your strResponse is a json array 

应该

 JSONArray jsonarray = new JSONArray(strResponse); 

[代表json数组节点

{代表json对象节点

 for(int i=0; i < jsonarray.length(); i++) { JSONObject jsonobject = jsonarray.getJSONObject(i); String id = jsonobject.getString("id"); String title = jsonobject.getString("title"); String company = jsonobject.getString("company"); String category = jsonobject.getString("category"); } 

你应该初始化json作为JSONArray

 JSONObject json = new JSONObject(strResponse); 

那么应该是:

 JSONArray json = new JSONArray(strResponse); 

但是,这不适用于以下两个操作:

 JSONArray name = json.names(); //.names() doesn't exist in JSONArray JSONArray internships = json.toJSONArray(name); // Is instead to be seen as 

如果你只是改变你的循环从json取得JSONObject (这样就消除了对.names()的依赖:

 JSONObject e = json.getJSONObject(i); 

编辑:完整的代码

 try { JSONArray internships = new JSONArray(strResponse); //Loop the Array for(int i=0;i < internships.length();i++) { Log.e("Message","loop"); HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = internships.getJSONObject(i); map.put("id", String.valueOf("id")); map.put("title", "Title :" + e.getString("title")); map.put("company", "Company : " + e.getString("company")); map.put("category", "Category : " + e.getString("category")); mylist.add(map); } } catch(JSONException e) { Log.e("log_tag", "Error parsing data "+e.toString()); } 

问题:

  JSONObject json = new JSONObject(strResponse); 

在这里, strResponse可能是JSONArray格式,因此在将其转换为JSONObject中遇到此exception。

试试这个,你的第一块是json数组,所以得到第一个json数组

 JSONArray jsonarray = new JSONArray(strResponse); for(int i=0;i < jsonarray .length();i++) { JSONObject jsonobj = new JSONObject(i); map.put("id", jsonobj .getString("id")); map.put("title", jsonobj .getString("title")); map.put("company", jsonobj .getString("company")); map.put("category", jsonobj .getString("category")); mylist.add(map); } 

如果这真的是你收到你的JSON应该取代整个这个:

 JSONObject json = new JSONObject(strResponse); //Get the element that holds the internship ( JSONArray ) JSONArray name = json.names(); JSONArray internships = json.toJSONArray(name); 

 JSONArray internships = json.toJSONArray(strResponse);