JSONArray中的多个匹配

时间:2017-09-06 20:07:41

标签: java json hashmap

我有一个表格的JSONArray:

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

我想比较上述情况中的各个字段 由于{ "Country" : "IN", "count" : 10}等于{ "Country" : "IN", "count" : 10}{ "Country" : "IN", "count" : 10}{ "Country" : "US", "count" : 20}等于{ "Country" : "US", "count" : 20}{ "Country" : "US", "count" : 20},我应该得到匹配结果。

但是对于下面这样的情况,我应该得到一个不匹配的结果,因为count不匹配。

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

我能够将数据放入HashMap。但我无法找到方法,如何比较。

myArray包含上述JSONArray。

int length = myArray.getJSONArray(0).length();
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(DataConstants.COUNTRY);
    Integer count = myArray.getJSONArray(j).getJSONObject(k).getInt(DataConstants.COUNT);
    cargo.put(country, count);
  }

}

if (cargo.size() == length) {
  System.out.println("Data Matched !!");
  return true;
}

else
  System.out.println("Data Not Matched !!");
return false;

谢谢,

2 个答案:

答案 0 :(得分:2)

您可以创建一个名为Country的类,您可以使用它来保存JSON数组中的数据。

class Country {
 private String countryCode;
 private int count;

 @Override
 public boolean equals(Object obj) {
   // compare your properties
 }

 @Override
 public int hashCode() {
   // Calculate a int using properties
 }
}

请参阅this tutorial了解如何实施equalshashcode方法。

然后,您需要将JSON数组转换为java对象。看看this tutorial

答案 1 :(得分:1)

使用两个变量创建一个Pojo对象并覆盖equals方法。

公共类国家{

private String code;
private int count;
//getters, setters

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((code == null) ? 0 : code.hashCode());
    result = prime * result + count;
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Country other = (Country) obj;
    if (code == null) {
        if (other.code != null)
            return false;
    } else if (!code.equals(other.code))
        return false;
    if (count != other.count)
        return false;
    return true;
}

}

现在,您可以通过更新代码来创建POJO对象的HashMap。

Country country = null;
        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(DataConstants.COUNTRY);
                Integer count = myArray.getJSONArray(j).getJSONObject(k).getInt(DataConstants.COUNT);
                country = new Country();
                country.setCode(country);
                country.setCount(count);
                cargo.put(country); //change cargo to take country objects
              }

            }

获得POJO列表后,您可以执行equals,contains和所有其他奇特的操作来了解匹配。