Ошибка анализа JSON для Android не может быть преобразована в JSONArray

Я довольно новичок в Android dev, и я пытаюсь написать программу для анализа JSON с сайта и вывода его в ListView. Однако, когда я запускаю свою программу, я получаю ошибку: (Есть более 7 строк, таких же, как эта ошибка)

03-31 05: 25: 14.296 3196-3196 / nazilli.tenispark E / FAILED: ошибка разбора Json: значение {"0": "2", "id": "2", "1": "0", " чид ":" 0" , "2": "1", "UID": "1", "3": "2017-04-01", "дата": "2017-04-01", "4" : «20», «час»: «20»} типа org.json.JSONObject не может быть преобразован в JSONArray

03-31 05: 25: 14.297 3196-3196 / nazilli.tenispark E / FAILED: ошибка разбора Json: значение {"0": "3", "id": "3", "1": "0", " чид ":" 0" , "2": "1", "UID": "1", "3": "2017-04-08", "дата": "2017-04-08", "4" : «20», «час»: «20»} типа org.json.JSONObject не может быть преобразован в JSONArray

JSON, я пытаюсь разобрать:

{ "назначение": [{ "0": "2", "идентификатор": "2", "1": "0", "чид": "0", "2": "1", "UID" : "1", "3": "2017-04-01", "дата": "2017-04-01", "4": "20", "час": "20"}, { "0" : "3", "идентификатор": "3", "1": "0", "чид": "0", "2": "1", "UID": "1", "3":» 2017-04-08" , "дата": "2017-04-08", "4": "20", "час": "20"}, { "0": "4", "идентификатор":» 4" , "1": "0", "чид": "0", "2": "1", "UID": "1", "3": "2017-04-15", "дата" : "2017-04-15", "4": "20", "час": "20"}, { "0": "5", "идентификатор": "5", "1": "0" , "чид": "0", "2": "1", "UID": "1", "3": "2017-04-22", "дата": "2017-04-22",» 4 ":" 20" , "час": "20"}, { "0": "6", "идентификатор": "6", "1": "0", "чид": "0",» 2 ":" 1" , "UID": "1", "3": "2017-03-24", "дата": "2017-03-24", "4": "17", "час" : "17"}, { "0": "7", "идентификатор": "7", "1": "0", "чид": "0", "2": "1", "UID" : "1", "3": "2017-03-26", "дата": "2017-03-26", "4": "17", "час": "17"}, { "0" : "8", "идентификатор": "8", "1": "1", "чид": "1", "2": "1", "UID": "1", "3":» 2017-03-26" , "дата": "2017-03-26", "4": "16", "час": "16"}, { "0": "9", "идентификатор":» 9" , "1": "2", "чид": "2", "2": "1", "UID": "1", "3": "2017-03-26", "дата" : "2017-03-26", "4": "15", "час": "15"}, { "0": "10", "идентификатор": "10", "1": "3" , "чид": "3", "2": "1", "UID": "1", "3": "2017-03-26", "дата" : "2017-03-26", "4": "13", "час": "13"}]}

Это мой список javascript java

public class adapter_appointment extends ArrayAdapter<String> { public adapter_appointment(Context context, String[] data){ super(context, R.layout.row_layout, data); } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(getContext()); View customView = inflater.inflate(R.layout.row_layout, parent, false); String all_data = getItem(position); TextView title = (TextView) customView.findViewById(R.id.title); //title.setText(all_data.toString()); try { JSONArray array = new JSONArray(all_data); JSONObject obj = array.getJSONObject(0); Log.d("SUCCESS", "JSON Object: " + obj.toString()); if (obj.has("date") && !obj.isNull("date")) { title.setText(obj.getString("date").toString()); Log.d("SUCCESS", "Date: " + obj.getString("date").toString()); } else { // Do something } } catch (Exception e) { Log.e("FAILED", "Json parsing error: " + e.getMessage()); } return customView; } } 

Это json.java

 public class my_appointments extends AppCompatActivity { ListView lv; InputStream is = null; String line = null; String result = null; String[] data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_appointments); lv=(ListView) findViewById(R.id.my_appointments); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build()); //Run getData(); ArrayAdapter adapter = new adapter_appointment(this, data); lv.setAdapter(adapter); } private void getData() { try { URL url = new URL("MY URL"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); is=new BufferedInputStream(con.getInputStream()); // BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); while((line=br.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); // JSONObject jo = new JSONObject(result); JSONArray ja = jo.getJSONArray("appointments"); data = new String[ja.length()]; for(int i=0;i<ja.length();i++) { jo=ja.getJSONObject(i); data[i]=jo.toString(); } } catch (Exception e) { e.printStackTrace(); } } } 

Если я не разбираюсь:

Введите описание изображения здесь

Все ваши данные имеют следующие данные.

  alldata={"0":"2","id":"2","1":"0","cid":"0","2":"1","uid":"1","3":"2017-04-01","date":"2017-04-01","4":"20","hour":"20"} 

Поэтому каждый раз, когда ваш элемент списка получает данные из этого массива назначения. Поэтому переменная alldata будет изменена в зависимости от позиции из метода getItem (position).

Итак, alldata – это jsonObject.

Поэтому вы должны разобрать, как показано ниже,

  JSONObject jsonRowData= new JSONObject(allData); try{ jsonRowData.getString("0"); jsonRowData.getString("id"): jsonRowData.getString("1"): jsonRowData.getString("cid"): jsonRowData.getString("2"): jsonRowData.getString("uid"): jsonRowData.getString("3"); jsonRowData.getString("date"): jsonRowData.getString("4"); }catch(Exception e){ e.printStackTrace(); } 

Как вам нужно позвонить. Надеюсь, поможет

Ваши appointmentsJSONArray

JSON

{ "назначение": [{ "0": "2", "идентификатор": "2", "1": "0", "чид": "0", "2": "1", "UID" : "1", "3": "2017-04-01", "дата": "2017-04-01", "4": "20", "час": "20"}]}

  JSONObject reader = new JSONObject(all_data); JSONArray jsonArray = reader.getJSONArray("appointments"); ......//Do your work//.......... 
 JSONObject jsonObject= new JSONObject(all_data); JSONArray jsonArray = jsonObject.getJSONArray("appointments"); // To get elements from the array for(int i=0;i<jsonArray.length;i++){ JSONObject json = jsonArray.getJSONObject(i); String id = json.getString("id"); String name=json.getString("cid"); } 
 JSONObject json = new JSONObject(all_data); JSONArray jsonArray = json.getJSONArray("appointments"); 

Вы должны получить массив из all_data и использовать его вместо json

Вы можете создать класс со структурой JSON и использовать GSON для получения таких данных, как User user = gson.fromJson(json, User.class)