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常用开源库集合【持续更新】

    1.FastJson  阿里巴巴工程师做的一个方便的JSON转换库 2.ButterKnife 只要作用能代替代码中大量的findviewbyid语句的使用,使用@injectview注入方式 3.v ...

  2. 初步认识ASP.NET WebForm

    C#可已进行以下两大类的开发 一.客户端应用程序C/S 主要有两种开发技术: 1.winForm windows窗体应用程序 2.WPF微软新一代图形框架 MFC(比较老的开发技术) MVVM(客户端 ...

  3. c++ vitual继承

    为了解决多继承下的二义性而设计的vitrul继承 class Base { public: Base(void); ~Base(void); }; Base::Base(void) { printf( ...

  4. EMR问题

    -- 门急诊患者生命体征信息 select t.clinic_code, t.*,t.rowid from ptm_opr_maininfo t where t.patient_id='0000E05 ...

  5. java的import关键字的使用

    在java中如何使用Java包中自带的类呢? 方法一: 在使用时可以用Java.(包名).(方法名).(包中的类名): 例如:Java.util.Arrays.toString(某个要排序数组); 具 ...

  6. 按失真类型分类整理TID2008

    对于图像质量评价(IQA)数据库,TID2008算是不大不小的数据集了.TID2008是由乌克兰国家航空航天大学的N504信号接收.传输与处理系建立,包括25幅参考图像,1700幅失真图像.失真类型有 ...

  7. Android之ContextMenu的使用方法以及与OptionMenu的区别(转)

    >> ContextMenu是android的context menu上下文菜单,选择某项VIEW后长按menu键,就会显示出来.比如EditeText就可以通过长按来弹出拥有“cut”, ...

  8. Java50道经典习题-程序32 左移右移

    题目:取一个整数a从右端开始的4-7位.分析:比如取123456789从右端开始的4-7位即:3456(1)先使a右移4位.(2)设置一个低4位全为1,其余全为0的数.可用~(~0<<4) ...

  9. Java50道经典习题-程序37 报数

    题目:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位.分析:最后留下的是第n号那位 import java.util.Scanne ...

  10. 别了,DjVu!

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2010.05.21 目录一.DjVu技术二.掌握DjVu技术的人三.玩DjVu的人四.小结跋:我与DjVu 谨以此文纪念与D ...