试图从JSONObject中获取JSONArray失败

时间:2018-05-15 03:30:21

标签: java json

我正在使用Spark编写一个使用Java的API(与我的问题无关,但它提供了一些上下文)。 我有以下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()的结果)。 但是,当我尝试在JSONArray中提取“campaignGroups”时,我得到:

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

我实际上是因为尝试获取任何密钥而得到此错误,例如调用get(“DBID”)将返回相同的错误。

我对这里发生的事情感到有点困惑,任何帮助都会受到赞赏。

编辑:因为它只是从例外显而易见,我使用的是json.org

谢谢!

2 个答案:

答案 0 :(得分:1)

我相信您遇到的错误是由于外部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");

答案 1 :(得分:0)

在该对象上调用toString()应该返回一个类似" [Object Object]"的字符串,如果必须在其上调用toString方法,那么您还需要在其上调用JSON.parse(your_object_here)来访问它上面的属性。

此外,您似乎需要寻找your_object_name.CfgCampaign.campaignGroups或your_object_name [" CfgCampaign"] [" 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