Java json字符串对比
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字符串对比的更多相关文章
- java json字符串和对象互转
/** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String ...
- java json字符串转成 Map或List
import java.util.List; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSONArra ...
- java Json字符串转List<Map>类型
//相关包 import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonPa ...
- Java——Json字符串与Object互转
public static void JacksonTest() {//推荐 //{"MNG001":[{"ID":"1","PW ...
- java json字符串传递给 js 时 特殊字符转义错误 研究
一些换行 回车等符号需要转义 主要注意 单引号 与双引号. 一 如果js以 双引号接收字符串 则转单引号 " 至 \" 否则js报错 二 如果js以 单引号接收字符串 则转单引号 ...
- java json字符串 获取value
java中可以导入有关json的jar包,但是此jar包又得依赖其他的jar包 ,所以需要导入的包如下: 可在这里下载相关jar包,CSDN下载啥都要钱 讨厌死了 还是这个链接好---云盘 htt ...
- Java Json字符串转Java对象遇到属性大小写的问题解决
String objectStr="{\"namE\":\"JSON\",\"age\":\"24\",\&q ...
- java json字符串与对象转换
下载引入包gson-2.0.jar 1.字符转数据 final Map map = new HashMap();map.put("contents", "[{\&q ...
- java json字符串转List、Map等对象
List<Map<String, Object>> map = g.fromJson(jsonStr, new TypeToken<List<Map<Stri ...
随机推荐
- [codeforces126B]Password
解题关键:KMP算法中NEXT数组的理解. #include<bits/stdc++.h> #define maxn 1000006 using namespace std; typede ...
- MyBatis02 MyBatis基础知识之Mapper映射器
1 Mapper映射器是什么 是符合映射文件要求的接口 接口要求 a. 方法名要与sql的id一致. b. 方法的参数类型要与parameterType一致. c. 方法的返回类型要与resultTy ...
- 面试题: java面试经历 已看1 抢红包如何分配每个人抢到的钱 有用 难点的面试题
2018.03.09 深圳乐唯科技 我看了下感觉这公司貌似挺不错的,面试官人也挺好的,氛围应该很不错,可惜我实力不足,唉,接续努力,下面把面试中印象较深的三个问题写一下. 面试问题1:数据库删除重复数 ...
- Advanced WordCount
Github:https://github.com/Hoyifei/SQ-T-Homework-WordCount-Advanced (注:Github上的所有代码由我代为提交) PSP:(注:部分实 ...
- 解决PendingIntent传递参数为空的问题
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); 在接收端,接收的数据一直为null,在google ...
- 笔录---果壳中的C#第一章
---恢复内容开始--- 笔录---果壳中的C#第二章 2.1 第一个C#程序 1.C#语句按顺序执行,以“:”结尾. Console.WriteLine(); console 为类,Writ ...
- C++11新标准:auto关键字
一.auto意义 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型,然后要做到这一点并非那么容易.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能 ...
- 让 Winform 窗口悬浮的简单方式
很多次设置这个 TopMost 属性会莫名的不起作用,有时又可以.一直在想是为什么会这样? 后来多次尝试,发现这个属性必须在窗体某些其他属性后设置,比如在 Height.Width 这样的属性后. 看 ...
- .NET 图片转base64
//图片 转为 base64编码的文本 private string ImgToBase64String(string Imagefilename) { try { Bitmap bmp = new ...
- day02.1-Linux虚拟操作系统的安装
在windons环境中配置Linux虚拟操作系统,需要事先在Windons系统上下载并安装虚拟运行软件“VMware Workstations”,以下虚拟物理机的建立和虚拟Linux系统的配置都是在该 ...