使用GSON比较两个JSON字符串的正确方法是什么?

时间:2014-12-09 03:50:43

标签: java json gson

使用GSON比较两个JSON字符串的正确方法是什么?

boolean match = false;
String json2 = "some json string";
String json1 = "another json string";
JsonParser parser = new JsonParser();
JsonElement t2 = parser.parse(json2);
JsonElement t1 = parser.parse(json1);
match = t2.equals(t1); // compare two json strings
if (match) {
    // do something
}

我的上述代码是否适合进行两次JSON比较?

2 个答案:

答案 0 :(得分:1)

您是否尝试过运行所提供的示例代码?如果您使用2个相等的JSON字符串但重新排列键的顺序,您将找到答案...

以下是示例代码:

String json1="  { \"name\" :\"ABC\",\"city\":\"XYZ\"}";
String json2="  { \"city\":\"XYZ\", \"name\" :\"ABC\"}";

JsonParser parser = new JsonParser();
JsonElement t2 = parser.parse(json2);
JsonElement t1 = parser.parse(json1); // returns true

答案 1 :(得分:-2)

你的意思是比较真的是字符串到字符串还是内容到内容?

如果要比较字符串到字符串,则应使用

int difference=aStr.compareTo(bStr);

如果您要比较内容与内容,则应使用GSON将JSON转换为POJO并在该POJO中实现equalsTo方法。

e.g:

public class City implements Comparable<City>{
    public String name;
    public int population;

    public int compareTo(City b){
        return name.compareTo(b.name)+population-b.population;
    }
}

Gson g=new Gson();
City a=g.fromJson(jsonA, City.class);
City b=g.fromJson(jsonB, City.class);

int difference=a.compareTo(b);