2015-10-09 42 views
0

我越来越从服务器以下JSON:
获取使用其他jsonarray值jsonarray的值作为重点

{ 
"Data": [ 
    { 
     "Record": [ 
      " d11", 
      "d12" 
     ] 
    }, 
    { 
     "Record": [ 
      " d21", 
      "d22" 
     ] 
    } 
], 
"Keys": [ 
    "Key1", 
    " key2" 
] 

}


我想要检索记录值这是订购相对于值(key1,key2?

注意:仅使用org.json api。

+0

首先,我不认为JSON是有效的。数据应该是一个对象而不是一个列表?列表中的键是否与数据对象的键匹配? – andersschuller

+0

它是一个有效的JSON ..我们已经实现了类似于..键是数据库列...并且值数组(data1&data2)具有d11 d12和d21 d22,它们是列的相应值。每个data1&data2是单独的行。 。我们使用了arraylist来确保插入顺序。注意:我们必须避免在服务器端放置key:value对。因此需要在客户端解析这个JSON .. – AskQ

+0

@andersschuller感谢您解决这个问题。 。我已经更新了正确的json ..问题依然存在.. – AskQ

回答

1

你的问题对我来说还是有点不清楚,但是我假设你想把这个JSON转换成一个记录列表,其中每个记录都是(例如)一个包含键列表中的键的映射,数据列表中的值。

为了实现这一点,我们首先解析JSON成JSONObject

String json = " ... "; 
JSONTokener tokener = new JSONTokener(json); 
JSONObject jsonObject = new JSONObject(tokener); 

然后,我们提取密钥列表和数据列表:

JSONArray data = jsonObject.getJSONArray("Data"); 
JSONArray keys = jsonObject.getJSONArray("Keys"); 

和定义的列表,以包含我们的输出:

List<Map<String, String>> records = new ArrayList<>(); 

最后,我们遍历数据列表,提取t他在该列表中的每一项记录值的列表,然后遍历键,以便创建一个映射,从键记录值:

for (int i = 0; i < data.length(); i++) { 
    JSONObject dataItem = data.getJSONObject(i); 
    JSONArray recordValues = dataItem.getJSONArray("Record"); 

    Map<String, String> record = new HashMap<>(); 

    for (int j = 0; j < keys.length(); j++) { 
     String key = keys.getString(j); 
     String value = recordValues.getString(j); 
     record.put(key, value); 
    } 

    records.add(record); 
} 

当我们再打印的records的价值,我们得到的东西,看起来像:

[{Key1= d11, key2=d12}, {Key1= d21, key2=d22}]