如何迭代具有不同标头的多个json对象的json数组

时间:2017-04-25 16:03:39

标签: java json

我从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");
  }

1 个答案:

答案 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)及其值(另一个带有fundCodefundName键的对象)的对象。请注意,对象具有一个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个对象的逻辑是相同的。)