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. java如何从cmd运行并使用text文件作为输入源的总结

    大家好,好几天没写东西了,又和大家见面了 首先,编译我们的.java文件,生成.class文件 使用命令 javac yourname.java 编译 然后使用java youname < yo ...

  2. Android远程服务(AIDL)实现步骤

    AIDL是安卓接口定义语言的缩写 由于笔者使用的是android studio所以建立AIDL文件的位置也需要注意,要在APPNAME->main->aidl->packagenam ...

  3. Ros学习——Python发布器publisher和订阅器subscriber

    1.编写发布器 初始化 ROS 系统 在 ROS 网络内广播我们将要在 chatter 话题上发布 std_msgs/String 类型的消息 以每秒 10 次的频率在 chatter 上发布消息 在 ...

  4. wenfrom的简单控件和repeater控件

    简单控件 lable  转换成<span>标记 literal   空的  什么也没转换 Literal.Text=<script>alter('你好');</scrip ...

  5. ZROI2018提高day4t3

    传送门 分析 我们假设如果一个点是0则它的值为-1,如果一个点是1则值为1,则一个区间的答案便是max(pre[i]+sur[i]),这里的pre[i]表示此区间i点和它之前的的前缀的最大值,sur[ ...

  6. 100198H Royal Federation

    传送门 题目大意 国家有N个城市,任意城市可以到达任意城市,是一棵树.国王要给这些城市分省份.每个省份最少M个城市,最多3M个城市.每个省有一个首府,首府不一定是这个省的城市,只是首府到这个省各个城市 ...

  7. Luogu 1484 种树

    Luogu 1792 算是双倍经验. 我们考虑对于一个点,我们要么选它,要么选它周围的两个点. 所以我们考虑用一个堆来维护,每次从堆顶取出最大值之后我们把它的权值记为:它左边的权值加上它右边的权值减去 ...

  8. LeetCode第617题:合并二叉树

    问题描述 解题思路 略略略略略 C++代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree ...

  9. ubuntu 12.04 (64位)下安装oracle 11g过程及问题总结

    最近公司用到oracle,在ubuntu64位安装了一下,碰到了一些问题,在网上搜索到了一些答案,在此作为笔记记录下来. 1.首先下载oracle并解压不再赘述. 2.安装依赖包 sudo apt-g ...

  10. DNS线路

    文章介绍 填写DNS地址时候,比较好记的就114.114.114.114,8.8.8.8,9.9.9.9,几个,但是常用的有哪些呢?这篇文章就简单介绍下了. 前言 两年多前,曾发帖对国内主流公共 DN ...