Я пишу 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
Спасибо !




Вызов 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, который содержал реальный объект.