Попытка получить JSONArray из JSONObject не удалась

Я пишу API на Java с использованием Spark (не имеет отношения к моей проблеме, но это дает немного контекста). У меня есть следующий JSON (точно такой, как он возвращается моей серверной частью):

{"CfgCampaign":{"callingLists":{"CfgCallingListInfo":{"callingListDBID":{"value":126},"share":{"value":10},"isActive":{"value":2}}},"xmlns":"http://schemas.genesyslab.com/Protocols/Configuration/ConfServer/2005/","DBID":{"value":101},"name":{"value":"WI_Camp_1"},"state":{"value":1},"campaignGroups":{"CfgCampaignGroupInfo":[{"groupType":{"value":5},"dialerDBID":{"value":0},"optMethodValue":{"value":80},"origDNDBID":{"value":0},"numOfChannels":{"value":10},"groupDBID":{"value":826},"isActive":{"value":2},"scriptDBID":{"value":0},"trunkGroupDNDBID":{"value":0},"operationMode":{"value":1},"dialMode":{"value":2},"statServerDBID":{"value":176},"optRecBuffSize":{"value":6},"optMethod":{"value":1},"minRecBuffSize":{"value":4}},{"groupType":{"value":5},"dialerDBID":{"value":0},"optMethodValue":{"value":80},"origDNDBID":{"value":0},"numOfChannels":{"value":10},"groupDBID":{"value":827},"isActive":{"value":2},"scriptDBID":{"value":0},"trunkGroupDNDBID":{"value":0},"operationMode":{"value":1},"dialMode":{"value":2},"statServerDBID":{"value":176},"optRecBuffSize":{"value":6},"optMethod":{"value":1},"minRecBuffSize":{"value":4}}]},"scriptDBID":{"value":0},"tenantDBID":{"value":101}}}

Вроде действительно, согласно https://jsonlint.com/ Я сохраняю его в своем коде как JSONObject (так что, по сути, приведенное выше является результатом toString ()). Однако, когда я пытаюсь извлечь «campaignGroups» в JSONArray, я получаю:

org.json.JSONException: JSONObject["campaignGroups"] not found.

Я действительно получаю эту ошибку, даже просто пытаясь получить любой ключ по этому поводу, например вызов get ("DBID") вернет ту же ошибку.

Я немного смущен тем, что здесь происходит, и любая помощь будет принята с благодарностью.

изменить: поскольку это очевидно только из исключения, я использую json.org

Спасибо !

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
103
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вызов toString () для этого объекта должен возвращать строку, которая выглядит примерно как «[Object Object]», если для него должен быть вызван метод toString, вам также необходимо вызвать JSON.parse (your_object_here) для него, чтобы доступ к свойствам на нем.

Также похоже, что вам нужно будет искать your_object_name.CfgCampaign.campaignGroups или your_object_name ["CfgCampaign"] ["campaignGroups", но это трудно сказать без кода, который вы используете для доступа к CampaignGroups.

Если вы установите что-то вроде

const obj = {"CfgCampaign":{"callingLists":{"CfgCallingListInfo":{"callingListDBID":{"value":126},"share":{"value":10},"isActive":{"value":2}}},"xmlns":"http://schemas.genesyslab.com/Protocols/Configuration/ConfServer/2005/","DBID":{"value":101},"name":{"value":"WI_Camp_1"},"state":{"value":1},"campaignGroups":{"CfgCampaignGroupInfo":[{"groupType":{"value":5},"dialerDBID":{"value":0},"optMethodValue":{"value":80},"origDNDBID":{"value":0},"numOfChannels":{"value":10},"groupDBID":{"value":826},"isActive":{"value":2},"scriptDBID":{"value":0},"trunkGroupDNDBID":{"value":0},"operationMode":{"value":1},"dialMode":{"value":2},"statServerDBID":{"value":176},"optRecBuffSize":{"value":6},"optMethod":{"value":1},"minRecBuffSize":{"value":4}},{"groupType":{"value":5},"dialerDBID":{"value":0},"optMethodValue":{"value":80},"origDNDBID":{"value":0},"numOfChannels":{"value":10},"groupDBID":{"value":827},"isActive":{"value":2},"scriptDBID":{"value":0},"trunkGroupDNDBID":{"value":0},"operationMode":{"value":1},"dialMode":{"value":2},"statServerDBID":{"value":176},"optRecBuffSize":{"value":6},"optMethod":{"value":1},"minRecBuffSize":{"value":4}}]},"scriptDBID":{"value":0},"tenantDBID":{"value":101}}}

тогда, чтобы получить массив в campaignGroups, вам понадобится что-то вроде:

obj.CfgCampaign.campaignGroups
Ответ принят как подходящий

Я считаю, что возникшая ошибка связана с внешним объектом JSON, «CfgCampaign», который содержит остальные ваши данные. Ниже показан пример кода, как обойти это с помощью библиотеки org.json:

// Loads the JSON (assuming you provide it as a string).
JSONObject x = new JSONObject(...);
// Gets and stores a reference to the outer object.
JSONObject y = x.getJSONObject("CfgCampaign");
// Now you can access any of the nested fields as follows.
JSONObject z = y.getJSONObject("campaignGroups");

Хм, верно. Это сработало отлично, спасибо большое. Думаю, я кое-что узнал. Я не делал различий между объектом JSON, который содержал реальный объект.

aur8l 15.05.2018 06:31

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