Итерация над вложенными объектами и массивом JSON в java

json для обработки моих объектов и массивов JSON из API. Моя проблема не обязательно связана с итерацией, однако некоторые экземпляры данных, которые я извлекаю, представляют собой массив JSON, а затем объекты JSON. Ниже приведены данные, которые я загружаю по экземплярам, ​​о которых я здесь говорю. Если посмотреть на ключ CustomerLog для первого набора данных, это массив, однако если вы посмотрите на второй набор данных, это будет объект.

Для получения этой информации я использую оператор for и вложенный цикл while. Но я получаю исключение из-за того, что я упоминаю, что CustomerLog иногда является массивом, а иногда и объектом.

Возникает исключение, потому что я запрашиваю массив JSON с помощью метода getJSONArray, но это объект. Мне действительно нужна помощь, потому что я действительно тяну время и не могу найти ответов на свою проблему. Любая помощь приветствуется.

 for (int k = 0; k < customer.length(); k++)
            {
                try
                {
                    customerlog = customer.getJSONObject(k).get("CustomerLogs");
                    System.out.println(customerlog.toString());
                    if (customerlog instanceof org.json.JSONObject)
                    {
                        Object logs = ((org.json.JSONObject) customerlog).getJSONArray("CustomLog");
                        Iterator iterator = ((org.json.JSONObject) logs).keys();
                        while (iterator.hasNext())
                        {

                        }
                        System.out.println(logs.toString());
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

{
   "CustomerLog":[
      {
         "Status":"Completed",
         "LastContacted":"2015-06-01 09:18:26",
         "LastContactedLocal":"2015-06-01 09:18:26",
         "DateRequiredFollowUp":"0000-00-00",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"34995",
         "Notes":"Tried ringing: Opening hours 10am-6.30 mon-fri - will ring back later.",
         "LastContactedUTC":"2015-05-31 23:18:26"
      },
      {
         "Status":"Completed",
         "LastContacted":"2015-06-01 17:12:33",
         "LastContactedLocal":"2015-06-01 17:12:33",
         "DateRequiredFollowUp":"0000-00-00",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"35064",
         "Notes":"Spoke to a fellow there: Veronica leaves about 3pm, said for me to ring back tomorrow before then.",
         "LastContactedUTC":"2015-06-01 07:12:33"
      },
      {
         "Status":"Completed",
         "LastContacted":"2015-06-02 10:14:26",
         "LastContactedLocal":"2015-06-02 10:14:26",
         "DateRequiredFollowUp":"2015-06-30",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"35071",
         "Notes":"Spoke to Veronica: primarily interested in our photo papers (said they have a printer cart supplier already); activated their account, emailed P/L, login for website, etc.",
         "LastContactedUTC":"2015-06-02 00:14:26"
      },
      {
         "Status":"Completed",
         "LastContacted":"2015-06-12 12:09:06",
         "LastContactedLocal":"2015-06-12 12:09:06",
         "DateRequiredFollowUp":"0000-00-00",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"35200",
         "Notes":"Veronica placed order - all good; had to ring her re: 2 x paper sample books (no longer available, cancelled B/O); said to let her know if they ever became available again.",
         "LastContactedUTC":"2015-06-12 02:09:06"
      },
      {
         "Status":"Completed",
         "LastContacted":"2015-07-06 09:58:25",
         "LastContactedLocal":"2015-07-06 09:58:25",
         "DateRequiredFollowUp":"2015-07-13",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"35546",
         "Notes":"Left voicemail mssge",
         "LastContactedUTC":"2015-07-05 23:58:25"
      },
      {
         "Status":"Completed",
         "LastContacted":"2015-08-06 11:41:04",
         "LastContactedLocal":"2015-08-06 11:41:04",
         "DateRequiredFollowUp":"2015-08-20",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"35962",
         "Notes":"Left voicemail message",
         "LastContactedUTC":"2015-08-06 01:41:04"
      },
      {
         "Status":"Completed",
         "LastContacted":"2015-09-04 14:32:13",
         "LastContactedLocal":"2015-09-04 14:32:13",
         "DateRequiredFollowUp":"2016-01-21",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"36372",
         "Notes":"Spoke to Veronica: said she'd done a big order & still ample stock (prob. only need to order 6-mthly); thanked her, said I'd keep in touch.",
         "LastContactedUTC":"2015-09-04 04:32:13"
      },
      {
         "Status":"Completed",
         "LastContacted":"2017-01-13 10:44:09",
         "LastContactedLocal":"2017-01-13 10:44:09",
         "DateRequiredFollowUp":"2017-03-10",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"39622",
         "Notes":"Spoke to Veronica: said she hadn't seen a P/L for a while; wants to stay on database; emailed P/L to her.",
         "LastContactedUTC":"2017-01-13 00:44:09"
      },
      {
         "Status":"Completed",
         "LastContacted":"2017-03-21 11:57:02",
         "LastContactedLocal":"2017-03-21 11:57:02",
         "DateRequiredFollowUp":"2017-06-20",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"40355",
         "Notes":"Spoke to Veronica; has our P/L, use us as a back-up supplier; will order as needed. ",
         "LastContactedUTC":"2017-03-21 01:57:02"
      },
      {
         "Status":"Require Recontact",
         "LastContacted":"2017-06-14 10:57:07",
         "LastContactedLocal":"2017-06-14 10:57:07",
         "DateRequiredFollowUp":"2017-08-15",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Stephen Legge",
         "LogID":"40950",
         "Notes":"Spoke to Veronica: has our P/L; right for stock (said things have been slow); talked about paper sale at the moment.",
         "LastContactedUTC":"2017-06-14 00:57:07"
      },
      {
         "Status":"Completed",
         "LastContacted":"2018-06-05 10:05:54",
         "LastContactedLocal":"2018-06-05 10:05:54",
         "DateRequiredFollowUp":"0000-00-00",
         "Customer":[
            "Veronica Hartmann"
         ],
         "FollowUpType":"",
         "AllocatedTo":"Paul Banks",
         "LogID":"43496",
         "Notes":"still has us on file doesnt sell much paper anymore but when she does she will call us ",
         "LastContactedUTC":"2018-06-05 00:05:54"
      }
   ]
}{
   "CustomerLog":{
      "Status":"Completed",
      "LastContacted":"2015-05-08 14:34:21",
      "LastContactedLocal":"2015-05-08 14:34:21",
      "DateRequiredFollowUp":"0000-00-00",
      "Customer":[
         "Roger "
      ],
      "FollowUpType":"",
      "AllocatedTo":"Stephen Legge",
      "LogID":"34292",
      "Notes":"Number disconnected - DELETE",
      "LastContactedUTC":"2015-05-08 04:34:21"
   }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
69
2

Ответы 2

Вы имеете в виду, что если есть только один результат, API просто ответит объектом, а не массивом с одним элементом? Если это так, у API есть проблема с дизайном. Должно быть ясно, когда возвращать отдельный экземпляр, а когда - коллекцию.

Самый быстрый способ - обработать объект в блоке catch:

catch (Exception e) 
{
    Object log = ((org.json.JSONObject) customerlog)get("CustomerLog");
    // do somthing with your log here
}

Почему бы просто не проверить, является ли customerLog массивом? if (Array.isArray(customerLog)), а потом решите, что делать со своими данными?

Другие вопросы по теме