我从rest webservice获取一个json数组,就像
一样 [{
"mutualFund":{"fundCode":"XYZ","fundName": "Funds - Global Income
Fund (G)-SGD","isin":"LU0882574725","sedol":"1234"}},
{"brokers":{"fundID":"abcd","fundName":"Funds - Focus
Fund A-USD","isin":"LU0197229882","sedol":"6543"}
}]
我试图迭代所有的mutualFund数组属性来获取它们的值。我已经尝试过这段代码片段但返回错误 - “mutualFund不存在”。在我的json文件中,一些对象属于mutualfund类型,有些对象具有不同的属性,因此我必须迭代并区分它们。所以我不能使用getJSONObject(i)。
JSONArray jsonArray=new JSONArray(response.getBody());
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject=jsonArray.getJSONObject("mutualFund");
}
答案 0 :(得分:2)
根据您使用的课程和方法,我假设您使用org.primefaces.json
课程。 但即使您使用的是其他API,逻辑也基本相同。
首先,看看你的JSON结构:
[
{
"mutualFund": {
"fundCode": "XYZ",
"fundName": "Funds-GlobalIncomeFund(G)-SGD","isin":"LU0882574725","sedol":"1234"
}
},
{
"brokers": {
"fundID": "abcd",
"fundName": "Funds-FocusFundA-USD","isin":"LU0197229882","sedol":"6543"
}
}
]
它是一个包含2个元素的数组。第一个元素是一个只有一个键(mutualFund
)及其值(另一个带有fundCode
和fundName
键的对象)的对象。请注意,对象具有一个mutualFund
密钥,并且您尝试获取它,就像对象本身 一个mutualFund
一样。这是造成错误的原因。
因此,要获取所有mutualFund
个对象,您需要检查数组中的每个元素,并且对于每个元素,您必须检查它是否具有mutualFund
键。然后你的代码将是这样的:
for (int i = 0; i < jsonArray.length(); i++) {
// get object i
JSONObject jsonObject = jsonArray.getJSONObject(i);
// check if object has mutualFund key
if (jsonObject.has("mutualFund")) {
// get mutualFund object and do something with it
JSONObject mutualFund = jsonObject.getJSONObject("mutualFund");
// do something with mutualFund object (you can get values for fundCode and fundName keys, etc)
}
}
注意:如果您使用的是其他JSON API,则方法名称可能会有所不同(而不是has
,有些使用containsKey
或{{1但是,查找get(key) != null
个对象的逻辑是相同的。)