判断两个json是否相等(比较两个json对象中的hello属性的属性值是否相等)

:暂无数据 2026-05-07 13:15:01 0

判断两个json是否相等(比较两个json对象中的hello属性的属性值是否相等)

其实判断两个json是否相等的问题并不复杂,但是又很多的朋友都不太了解比较两个json对象中的hello属性的属性值是否相等,因此呢,今天小编就来为大家分享判断两个json是否相等的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

比较两个json对象中的hello属性的属性值是否相等

比较两个json对象中的hello属性的属性值是否相等的方法。
1、json数据转换成字典。
2、将两个字典按key排好序,然后使用zip函数将两个字典对应的元素打包成元组。
3、比较对应的元素的value是否相等即可。

如何判断两个接口返回的json数据是否有diff

背景:在工作中经常会遇到接口迁移,但是呢又需要保证迁移前后返回的数据是一致的,这时候就需要做diff测试

分析:接口返回的json 数据中包含很多类型的字段,例如:object,jsonObject,String,jsonArray等等,因为需要分别几个函数实现:jsonObject,jsonArray,Object的diff

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class BasicDiff {
public static class DiffResult{
private Boolean hasDiff = false;
private String diffMessage;
public Boolean getHasDiff() {
return hasDiff;
}
public void setHasDiff(Boolean hasDiff) {
this.hasDiff = hasDiff;
}
public String getDiffMessage() {
return diffMessage;
}
public void setDiffMessage(String diffMessage) {
this.diffMessage = diffMessage;
}
@Override
public String toString() {
return "DiffResult{" +
"hasDiff=" + hasDiff +
", diffMessage=’" + diffMessage + ’\’’ +
’}’;
}
}
DiffResult diffResult=new DiffResult();
public  DiffResult compareObject(Object oldObject,Object newObject, String key, int index) {        if(oldObject == null || newObject == null){
           diffResult.hasDiff = true;
           diffResult.setDiffMessage(key+" 的value中old和new有一个或者两个为null");            return diffResult;
       }        if(oldObject!=null&&newObject!=null) {            if (diffResult.getHasDiff()) {                return diffResult;
           }            if (oldObject != null && newObject != null && oldObject.getClass() != newObject.getClass()) {
               diffResult.hasDiff = true;
               diffResult.setDiffMessage(key + " 的value的old和new 的类型不一致");                return diffResult;
           }            if (oldObject instanceof JSONObject && newObject instanceof JSONObject) {
               compareJsonObject((JSONObject) oldObject, (JSONObject) newObject, key, index);                if (diffResult.getHasDiff()) {                    return diffResult;
               }
           } else if (oldObject instanceof JSONArray && newObject instanceof JSONArray) {
               compareJsonArray((JSONArray) oldObject, (JSONArray) newObject, key, index);                if (diffResult.getHasDiff()) {                    return diffResult;
               }
           } else {
               String oldStr = oldObject.toString();
               String newStr = newObject.toString();                if (!oldStr.equals(newStr)) {
                   diffResult.hasDiff = true;
                   diffResult.setDiffMessage("index: " + index + ", " + key + " 的value中old和new 的值不相等");                    return diffResult;
               }
           }
       }        return diffResult;
   }    public  DiffResult compareJsonArray(JSONArray oldJarr, JSONArray newJarr, String key, int index) {        if(diffResult.getHasDiff()){            return diffResult;
       }        if(oldJarr == null || newJarr == null){
           diffResult.hasDiff = true;
           diffResult.setDiffMessage(key+" 的value中两个结果存在null");            return diffResult;
       }        if(oldJarr.size() != newJarr.size()){
           diffResult.hasDiff = true;
           diffResult.setDiffMessage("index:"+ index+", "+key + " 的value中old和new 数组size不相等");            return diffResult;
       }        //jsonarray中元素是个object,排序之后再比较
       if(oldJarr.size() 》 0 && !(oldJarr.get(0) instanceof JSONObject) && !(oldJarr.get(0) instanceof JSONArray)){
           String;
           String;
           List《String》 tmp = new ArrayList《String》();            for(int i = 0; i 《 arrOld.length; i++){
               arrOld = oldJarr.get(i).toString();
               arrNew = newJarr.get(i).toString();
               tmp.add(oldJarr.get(i).toString());
           }
           Arrays.sort(arrOld);
           Arrays.sort(arrNew);            for(int i = 0; i 《 arrNew.length; i++){                if(!arrOld)){
                   diffResult.hasDiff = true;
                   diffResult.setDiffMessage("index:"+ index+", "+key + " 的value中第"+tmp.indexOf(arrOld)+"个old和new 值不相等");                    return diffResult;
               }
           }
       }else{            for(int i = 0; i 《 oldJarr.size(); i++){                if(oldJarr.get(i) != null && newJarr.get(i) != null && oldJarr.get(i).getClass()!= newJarr.get(i).getClass()){
                   diffResult.hasDiff = true;
                   diffResult.setDiffMessage("index:"+ index+", "+key + " 的value中old和new 的类型不一致");                    return diffResult;
               }                if(oldJarr.get(i) instanceof JSONObject){
                   JSONObject jold = (JSONObject)oldJarr.get(i);
                   JSONObject jnew = (JSONObject)newJarr.get(i);                    if(jold.equals(jnew)){                        continue;
                   }else{
                       Boolean cd = customHasDiff(oldJarr,newJarr,key,i,diffResult);                        if(!cd) continue;
                       compareJsonObject((JSONObject)oldJarr.get(i),(JSONObject)newJarr.get(i),key,i);                        if(diffResult.getHasDiff()){                            return diffResult;
                       }
                   }
               }else if(oldJarr.get(i) instanceof JSONArray) {
                   compareJsonArray((JSONArray) oldJarr.get(i), (JSONArray) newJarr.get(i), key, i);                    if(diffResult.getHasDiff()){                        return diffResult;
                   }
               }
           }
       }        return diffResult;
   }

public DiffResult compareJsonObject(JSONObject oldJson, JSONObject newJson, String key, int index) {
if(diffResult.getHasDiff()){
return diffResult;
}
if(oldJson == null || newJson == null){
diffResult.hasDiff = true;
diffResult.setDiffMessage(key+" 的value中两个结果存在null");
return diffResult;
}

Set《String》 sold = oldJson.keySet();
Set《String》 snew = newJson.keySet();
if (key.isEmpty()) {
key = "root";
}
//keysize是否相等
if (sold.size() != snew.size()) {
diffResult.hasDiff = true;
diffResult.setDiffMessage(key + " 的keySet的数量不一致,线上有" + sold.size() + "个key,待测服务有" + snew.size() + "个key");
return diffResult;
}

//key是否相同
for (String kold : sold) {
if (!snew.contains(kold)) {
diffResult.hasDiff = true;
diffResult.setDiffMessage("待测服务的" + key + "的keyset不包含" + kold);
return diffResult;
}
}
//value进行校验
for(String kold :sold){

//此处是进行过滤的,如果哪些字段不需要进行diff,就在这里过滤掉,例如接口返回的globalid,每次返回的值都不一样,不需要进行diff
if(kold.equals("globalId")) {
continue;
}

Object oldObject = oldJson.get(kold);
Object newObject = newJson.get(kold);
compareObject(oldObject, newObject, key + "-》" + kold, index);
if (diffResult.getHasDiff()) {
return diffResult;
}

}

return diffResult;
}

}

写好了diff比较的工具类就可以用来进行比较了:下面是如何使用的代码

***隐藏网址***
Thread.sleep(100);
***隐藏网址***
JSONObject resultObject1=JSON.parseObject(resultOnline);
JSONObject resultObject2=JSON.parseObject(resultNeedDiff);
BasicDiff bf=new BasicDiff();
d1=bf.compareObject(resultObject1,resultObject2,"",0)                
if(d1.getHasDiff()){
System.out.println("============有diff==========");
System.out.println(d1.getHasDiff());
}

Linux Shell jq比较json是否相同

问题:shell下使用jq比较两个json是否相等,第一个难点是KEY需要排序,第二个难点是array需要排序

Jq 本身提供-S参数使key进行排序

不过无法处理array.

jq提供了walk功能可以对所有的key进行遍历,同时他的example1就展示了如何对array进行排序,但apt中提供的jq不具有这个功能。

在github上找到了可以在jq1.5中使用walk的方法

最后写成了这个样子,

Python:比较两个json串是否相等,是直接把它当成字符串来比较呢还是json.loads(),转化一下再比较

其实如果你要包含 dict 的 compare json 是不可能的(json.dumps 加上 sort_keys=False 没用, 因为 whitespace 问题)。最好的方法是确保你的 json 来源是至多使用 list , 这样一来用 json.loads() 自然就达到你的 compare json(上面说了避免 whitespace 问题)。否则如果一定要用 dict 可是就要考虑 whitespace, 就要确保你的 json 来源是 in order 的(server 那里检查)。然后直接 字符串 str 比较。

两个json比较

由于HashMap是无顺序的,所以只要把这个json string转换成HashMap之后,用Map.equals()就可以比较它们是否相同了。
***隐藏网址***
那么可以这么做:
boolean compareJson(str1,str2) {
// 分别转换两个json string到json object
JSONObject json1 = new JSONObject(str1);
JSONObject json2 = new JSONObject(str2);
// 由于json object的tostring方法,是按指定的顺序来输出的,所以两个相同的json,输出的string应该相同。
if (json1.toString().equals(json2.toString()) return true;
return false;
}

js 如何比较两个对象相等

简单一点的就是对象转json字符串然后比对,如果对象属性顺序不一样的话也是会返回不一样的。
最简单有准确的就是获取对象的属性名做比对如果一样则再比对属性值是否一致。

关于本次判断两个json是否相等和比较两个json对象中的hello属性的属性值是否相等的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

判断两个json是否相等(比较两个json对象中的hello属性的属性值是否相等)

本文编辑:admin

更多文章:


send out用法及例句(send out是什么意思)

send out用法及例句(send out是什么意思)

各位老铁们好,相信很多人对send out用法及例句都不是特别的了解,因此呢,今天就来为大家分享下关于send out用法及例句以及send out是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 20:30

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

大家好,关于全球新冠肺炎疫情背景下航运发展很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年9月7日 17:10

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

大家好,关于matlab求解带字母参数方程组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数的知识点,相信应该可以解决大家的一些困惑和问题,

2026年9月7日 16:30

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

本篇文章给大家谈谈oracle中的循环语句,以及下面哪个不是oracle程序设计中的循环语句 a for对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 15:30

多表查询怎么做(Excel技巧:如何多表同步筛选)

多表查询怎么做(Excel技巧:如何多表同步筛选)

各位老铁们好,相信很多人对多表查询怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于多表查询怎么做以及Excel技巧:如何多表同步筛选的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 15:10

服装店网站网页设计(服装网站建设目标设计要看甲方)

服装店网站网页设计(服装网站建设目标设计要看甲方)

“服装店网站网页设计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看服装店网站网页设计(服装网站建设目标设计要看甲方)!

2026年9月7日 14:10

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)

大家好,电脑里2个系统怎么删除一个相信很多的网友都不是很明白,包括电脑开机显示有两个系统,如何删除一个也是一样,不过没有关系,接下来就来为大家分享关于电脑里2个系统怎么删除一个和电脑开机显示有两个系统,如何删除一个的一些知识点,大家可以关注

2026年9月7日 12:20

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

苹果手机代码大全(恢复更新固件iOS未知错误代码解决大全)

大家好,今天小编来为大家解答以下的问题,关于苹果手机代码大全,恢复更新固件iOS未知错误代码解决大全这个很多人还不知道,现在让我们一起来看看吧!

2026年9月7日 10:20

scrollthrough意思(“scroll”是什么意思)

scrollthrough意思(“scroll”是什么意思)

今天给各位分享“scroll”是什么意思的知识,其中也会对“scroll”是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月7日 08:00

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)

本篇文章给大家谈谈怎么激活keygen,以及注册机如何激活cad2008一个简单激活cad2008的方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站

2026年9月7日 06:30

最近更新

热门文章

dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表