public class JsonUtil {

    public static boolean compareJsonText(String str1, String str2) {
return compareJsonNode(JsonUtil.readTree(str1), JsonUtil.readTree(str2));
} public static boolean compareJsonNode(JsonNode node1, JsonNode node2) {
if(node1.isObject()) {
if(!node2.isObject()) return false;
if(!compareFieldNames(node1.fieldNames(), node2.fieldNames()))
return false;
Iterator<Entry<String,JsonNode>> fields1 = node2.fields();
Map<String,JsonNode> fields2 = getFields(node1);
boolean flag = true;
while(fields1.hasNext()){
Entry<String,JsonNode> field1 = fields1.next();
JsonNode field2 = fields2.get(field1.getKey());
if(!compareJsonNode(field1.getValue(), field2))
flag = false;
}
return flag;
} else if(node1.isArray()) {
if(!node2.isArray()) return false;
return compareArrayNode(node1, node2);
} else {
return node1.toString().equals(node2.toString());
}
} public static boolean compareArrayNode(JsonNode node1, JsonNode node2){
Iterator<JsonNode> it1 = node1.elements();
while(it1.hasNext()){
boolean flag = false;
JsonNode node = it1.next();
Iterator<JsonNode> it2 = node2.elements();
while(it2.hasNext()){
if(compareJsonNode(node, it2.next())){
flag = true;
break;
}
}
if(!flag)
return false;
}
return true;
} public static boolean compareFieldNames(Iterator<String> it1, Iterator<String> it2) {
List<String> nameList1 = new ArrayList<String>();
List<String> nameList2 = new ArrayList<String>();
while(it1.hasNext()){
nameList1.add(it1.next());
}
while(it2.hasNext()){
nameList2.add(it2.next());
}
return nameList1.containsAll(nameList2) && nameList2.containsAll(nameList1);
} public static Map<String, JsonNode> getFields(JsonNode node) {
Iterator<Entry<String,JsonNode>> fields = node.fields();
Map<String, JsonNode> fieldMap = new HashMap<String, JsonNode>();
while(fields.hasNext()){
Entry<String,JsonNode> field = fields.next();
fieldMap.put(field.getKey(), field.getValue());
}
return fieldMap;
}
}

Java json字符串对比的更多相关文章

  1. java json字符串和对象互转

    /** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String ...

  2. java json字符串转成 Map或List

    import java.util.List; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSONArra ...

  3. java Json字符串转List<Map>类型

    //相关包 import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonPa ...

  4. Java——Json字符串与Object互转

    public static void JacksonTest() {//推荐 //{"MNG001":[{"ID":"1","PW ...

  5. java json字符串传递给 js 时 特殊字符转义错误 研究

    一些换行 回车等符号需要转义 主要注意 单引号 与双引号. 一 如果js以 双引号接收字符串 则转单引号 "  至 \" 否则js报错 二 如果js以 单引号接收字符串 则转单引号 ...

  6. java json字符串 获取value

    java中可以导入有关json的jar包,但是此jar包又得依赖其他的jar包 ,所以需要导入的包如下: 可在这里下载相关jar包,CSDN下载啥都要钱  讨厌死了  还是这个链接好---云盘 htt ...

  7. Java Json字符串转Java对象遇到属性大小写的问题解决

    String objectStr="{\"namE\":\"JSON\",\"age\":\"24\",\&q ...

  8. java json字符串与对象转换

    下载引入包gson-2.0.jar 1.字符转数据 final Map map = new HashMap();map.put("contents",    "[{\&q ...

  9. java json字符串转List、Map等对象

    List<Map<String, Object>> map = g.fromJson(jsonStr, new TypeToken<List<Map<Stri ...

随机推荐

  1. 关于android studio中使用class.forname()方法动态获取类实例报NO CLASS FOUND异常的几种处理方法

    最近在做一个项目的时候需要用到反射来回调子类的方法,但是在反射过程中总是在class.forname()方法抛出NO CLASS FOUND异常,经过几部检查,问题解决,在此总结一下引起该问题的原因 ...

  2. 71-n皇后

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. p3172 选数

    传送门 分析 对这个$f(k)$整除分块,用杜教筛搞出$\mu$的部分然后另一部分快速幂即可 代码 #include<iostream> #include<cstdio> #i ...

  4. 形式化方法的逆袭——如何找出Timsort算法和玉兔月球车中的Bug?

    https://bindog.github.io/blog/2015/03/30/use-formal-method-to-find-the-bug-in-timsort-and-lunar-rove ...

  5. JavaWeb_泛型(Generic)

    JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转换,这样不可避免的就会引发程序的一些安全性问题.例如: ArrayList list = new ArrayList ...

  6. scala中的self type

    scala目前的书籍有两<快学scala>和<scala编程>.资料确实不多,对这个语法使用只能结合使用进行理解. 先看源码: private[spark] trait Act ...

  7. 如何使用ArcPy

    ArcPy可以很方便的通过脚本调用ArcGIS的各种函数和功能.在此简单介绍一下.方法包括两种,第一种是直接使用ArcGIS中的命令行,输入一句,执行一句:第二种是创建一个Python脚本,直接执行其 ...

  8. java 英文笔记

    JDBC涉及到的单词 Driver 驱动器 DriverManager (Manager 处理者,经理,管理人; 干事,理事; 〈美〉(政党等的)领袖; 策士,干才,干练的人;) create Sta ...

  9. 【Arcgis for android】Error inflating class com.esri.android.map.MapView【已解决】

    解决方案:如果你是一个项目之前调试是好的,突然调试报这个错,听我的,直接卸载手机上调试的这个程序,重新调试,你会发现ok了 环境:arcgis android 10.2 错误:E/AndroidRun ...

  10. 使用 create 命令建立数据库v, 并利用sp_helpdb查看数据库文件

    create database v on primary (name = v, filename='D:\v.mdf', size=3mb, maxsize=10mb, filegrowth=2mb ...