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 ...
随机推荐
- ORACLE体系结构一 (物理结构)- 数据文件、日志文件、控制文件和参数文件
一.物理结构Oracle物理结构包含了数据文件.日志文件.控制文件和参数文件 1.数据文件每一个ORACLE数据库有一个或多个物理的数据文件(data file).一个数据库的数据文件包含全部数据库数 ...
- android手机分辨率的一些说明
Android上常见度量单位 px(像素):屏幕上的点,绝对长度,与硬件相关 in(英寸):长度单位 mm(毫米):长度单位 pt(磅):1/72英寸,point dp(与密度无关的像素):一种基于屏 ...
- 最短路dijkstra堆优化
demo: #include<bits/stdc++.h> #define max_v 102000 #define inf 0x3f3f3f3f using namespace std; ...
- [转]PHP 面试问哪些问题可以比较准确的反映出应聘者的开发水平?
基础题 场景: 你入职了一家新公司. 上班第一天,接待人给你安排好了座位,然后拉过来一台没拆封的新电脑. 你把电脑连接好之后,按下电源.... 好吧,这真是一台新电脑,里边竟然内置了个DOS系统!! ...
- mysql 5.7.11 源码安装
mysql5.711安装 1.安装boost包下载地址http://sourceforge.net/projects/boost/files/boost/ 2.解压boost_1_59_0.tar.g ...
- Linux网络配置常用命令
计算机需要网络连接才能和其他计算机通信,这是通过操作系统识别接口卡(如以太网卡.猫等等),并配置该接口以连接到网络上来实现的.网络配置命令可以用来配置以下类型的网络接口:以太网.ISDN(综合业务数字 ...
- LeetCode第496题:下一个更大元素 I
问题描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...
- HDU 5038 Grade (水题,坑题)
题意:给 n 个数,输出众数,但是如果所有的频率都相同但数不同输出 Bad Mushroom. 析:直接记录个数直接暴力就,就是要注意只有一种频率的时候. 代码如下: #pragma comment( ...
- Android ExpandableListView的使用
一.MainActivity要继承ExpandableListActivity.效果是当单击ListView的子项是显示另一个ListView. package com.example.explear ...
- [raspberry pi3] raspberry 充当time machine
之前是用硬盘直接当timemachine的,看到有人用raspberry+硬盘充当timemachine的 自己的也搞了下,还是蛮方便的,下面是具体的步骤 1.安装必要的服务 sudo apt-get ...