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;
    }
}
时间: 2024-10-19 19:59:02

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

java json字符串和对象互转

/** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String content; public NewPost(){ } public NewPost(String title,String content){ setTitle(title); setContent(content); } public String getTitle() { return ti

java json字符串转成 Map或List

import java.util.List; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * 说明 json字符串 转成 Map/List * @author xss * @date 2013-1-18 10:22:41 * @mail [email protected] */ public class Json

java Json字符串转List&lt;Map&gt;类型

// 相关的import import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; // code  JsonParser jsonparer = new JsonParser();    JsonElement je = null;    je = jsonparer.p

java json字符串转JSONObject和JSONArray以及取值

import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonTest { public static void main(String[] args) { String joStr = "{name:\"张三\",age:\"20\"}"; //将json字符串转化为JSONObject JSONObject jsonObject = JSONObje

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

List<Map<String, Object>> map = g.fromJson(jsonStr, new TypeToken<List<Map<String, Object>>>(){}.getType());

Java中json工具对比分析

Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.codehaus.org/ gson1.7.1 http://code.google.com/p/google-gson/ jsob_lib2.4 http://json-lib.sourceforge.NET/ 3,使用实例          用两个bean进行测试,两个bean都嵌套有数组和对象,

JSON 字符串 与 java 对象的转换

jsonLib 经典文章:http://json-lib.sourceforge.net/xref-test/net/sf/json/TestJSONObject.html // 引入相应的包 //json-lib-2.2-jdk15.jar import net.sf.json.JSONArray;import net.sf.json.JSONObject; 1. //把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromOb

Json对象与Json字符串的转化、JSON字符串与Java对象的转换

Json对象与Json字符串的转化.JSON字符串与Java对象的转换 一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.stringify(obj)将JSON转为字符串.JSON.parse(string)

json字符串与java对象互转

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串 [