2017-04-25 36 views
1

我正在从静止web服务的JSON数组响应这就好比如何通过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"} 
}] 

我试图遍历所有共同基金阵列属性来获取多个JSON对象其值。我已经尝试了这段代码片段,但它返回的错误 - “互助基金不存在”。在我的json文件中,一些对象是基金类型的,另一些是具有不同属性的其他类型,所以我必须迭代和区分两者。所以我不能使用getJSONObject(i)。您正在使用

JSONArray jsonArray=new JSONArray(response.getBody()); 
    for(int i=0;i<jsonArray.length();i++){ 
    JSONObject jsonObject=jsonArray.getJSONObject("mutualFund"); 
    } 
+0

你正在使用哪个json库? – 2017-04-25 16:26:52

回答

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键)的对象。请注意,对象 a mutualFund键,并且您试图获得它,好像对象本身 a 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,或get(key) != null,但逻辑发现mutualFund对象将是相同的)。

+0

我正在使用org.json库。 –

+0

对于'org.json',代码将是相同的。你测试过了吗? – 2017-04-26 12:01:26