比较两个json字符串并使用Java打印它们之间的差异

时间:2017-10-13 22:13:21

标签: java json string comparison jsonp

我有两个json字符串,我想将string2与string1进行比较并打印它们不同的地方。

  

例如:

     

expectedJson:   { “产品”:{ “产品”:[{PRODUCT_NAME “:” 字符串 “” UNIT_COST “:” 串 “}],” 地区 “:[” 字符串“]}}

     

inputJson:   { “产品”:{ “产品”:[{PRODUCT_NAME “:” 字符串 “” UNIT_COST “:” 号码 “}],” 地区 “:[” 字符串“]}}

     

比较结果应该是这样的:差异:   “UNIT_COST”: “数字”

我正在使用JSONP(javax)库来读取和解析输入JSON有效负载并构建上面的(inputJosn)字符串,现在想将它与实际预期的json架构(actualJson)字符串进行比较。

对此有何想法或意见?

1 个答案:

答案 0 :(得分:0)

您可以将这些json对象实例化为java POJO,并在类中使用方法或静态方法来比较并提供所需的结果。

1-编写一个复制您正在接收的json结构的类。由于您有一个列表,您可能需要编写多个类,因此您可以拥有复制数组的属性,例如:

public static final ArrayList<String> tellMeTheDifferenceBetween(ClassA obj1, ClassA obj2){
    ArrayList<String> rtn = new ArrayList<>();

    if(!ojb1.getProp1().equals(obj2.getProp2)){
         rtn.add("Prop1_is_different");
    }

    if(ojb1.getProp2() != obj2.getProp2){
         rtn.add("Prop2_is_different");
    }

    ...

    return rtn;
}

2-为类的所有属性添加公共getter和setter

3-使用Gson库将json字符串(预期和接收)反序列化为对象或您编写的顶级类。

4-在顶级类中编写一个静态方法来比较对象并返回所需的结果。

这可能是实现静态方法进行比较的一种方法,根据您的需要,您可以完全不同。

from sys import path
path.append('/PythonLibrary/PostgreSQL')
from Module import funcA, funcB, etc