将JSONArray转换为HashMap和匹配

时间:2017-09-06 10:07:59

标签: java arrays json hashmap

我有一个JSONArray,其数据格式如下:

[[{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}],
[{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}]]

我想将数据放到HashMap中,如下所示:

"IN":10
"US":20
"IN":10
"US":20

基本上,我正在进行计数匹配,以确保某个类型的所有Country具有相同的count

以下是我尝试的内容,JSONArray存储为myArray

Map<String, Integer> cargo = new HashMap<>();
for (int j = 0; j < myArray.length(); j++) {
  String country = myArray.getJSONObject(j).getString("country");
  Integer count = myArray.getJSONObject(j).getInt("count");
  cargo.put(country, count);
}

但我收到JSONArray[0] is not a JSONObject错误。

谢谢,

编辑:这有助于我将其映射。

`

Map<String, Integer> cargo = new HashMap<>();
for (int j = 0; j < myArray.length(); j++) {
  for (int k = 0; k < myArray.getJSONArray(j).length(); k++) {
    String country = myArray.getJSONArray(j).getJSONObject(k).getString("country");
    Integer count = myArray.getJSONArray(j).getJSONObject(k).getInt("count");
    cargo.put(country, count);
  }

`

2 个答案:

答案 0 :(得分:1)

您的JSONArray[0]等于

[{ "Country" : "IN", "count" : 10},{ "Country" : "US", "count" : 20}]

因此,确实不是JSONObject,您需要在for内执行for,以迭代每个对象。

for (int j = 0; j < myArray.length(); j++) {
  for (int k = 0; k < myArray[j].length(); k++) {
    String country = myArray[j].getJSONObject(k).getString("country");
    Integer count = myArray[j].getJSONObject(k).getInt("count");
    cargo.put(country, count);
  }
}

答案 1 :(得分:0)

你的json是一个数组数组,所以你需要在每个数组上有一个额外的循环。