当前位置: 首页 > 面试题库 >

比较2个JSON对象

梁勇
2023-03-14
问题内容

是否有任何方法可以接收2个JSON对象并将其进行比较以查看是否有任何数据已更改?

编辑

在审查评论之后,需要进行一些澄清。

  1. JSON对象定义为

“一组无序的名称/值对。一个对象以{(左括号)开始,以}(右括号)结束。每个名称后面都带有:(冒号),名称/值对之间以,(逗号)分隔。 ”。-
json.org

  1. 我的目标是能够简单地比较2个JSON对象文字。

我不是javascript专家,所以如果在javascript中这些是对象文字,那么我想这就是我应该称呼它们的东西。

我相信我正在寻找的是一种能够做到的方法:

  1. 深度递归以查找唯一的名称/值对
  2. 确定两个对象文字的长度,并比较名称/值对,以查看两者中是否存在差异。

问题答案:

仅仅解析JSON并比较两个对象是不够的,因为它不是完全相同的对象引用(但可能是相同的值)。

您需要做一个深刻的平等。

来自http://threebit.net/mail-archive/rails-
spinoffs/msg06156.html-
似乎使用jQuery。

Object.extend(Object, {
   deepEquals: function(o1, o2) {
     var k1 = Object.keys(o1).sort();
     var k2 = Object.keys(o2).sort();
     if (k1.length != k2.length) return false;
     return k1.zip(k2, function(keyPair) {
       if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
         return deepEquals(o1[keyPair[0]], o2[keyPair[1]])
       } else {
         return o1[keyPair[0]] == o2[keyPair[1]];
       }
     }).all();
   }
});

Usage:

var anObj = JSON.parse(jsonString1);
var anotherObj= JSON.parse(jsonString2);

if (Object.deepEquals(anObj, anotherObj))
   ...


 类似资料:
  • 使用RestAssured,我试图比较两个JSON对象。 示例:第一个JSON来自excel,我将其作为字符串读取并存储 第二个 JSON 是返回响应对象的响应,该响应对象实际上是一个 JSON 我想将这两者作为JSON对象进行比较,因为当我将响应转换为String并尝试进行比较时,如果JSON模式的顺序发生变化,我的断言就会失败。 我尝试了将字符串转换成JSON的方法,但是没有找到任何方法。有人

  • 我怎么能那么做?

  • URL 1-- 如何比较响应1和响应2? 响应2将有额外的属性,因此不能直接使用匹配命令 响应1{名称:你好,国家: ABCD}响应2{名称:你好,国家: ABCD,国家: xyz} 只想比较名称和国家属性,而不想硬编码比较,如匹配响应1。name==response2。名称 将来可能会添加额外的属性,并且不希望频繁修改脚本 或 是否有方法从空手道传递对JavaScript函数的响应并执行比较 比

  • 问题内容: 是否可以比较2组json对象的差异?我所拥有的是一个通过jquery $ post()轮询JSON对象的脚本。我想要做的是拿走刚刚被轮询的对象,并将其与存储的对象进行比较。如果一个与另一个之间有任何更改,请将其应用于存储对象或替换(以任何一种方式替换),但是从UI角度来看,我正在通过查找两者之间的差异,将更改无缝地应用于JSON对象。 2.之所以要这样做,是因为现在我已经拥有了UI,因

  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部

  • 问题内容: 我有这个间隔,当前每5秒执行一次ajax请求。我对声明有疑问。我的代码总是输入它,并且两个json值完全相同,为什么它认为它们不同? 编辑 这是控制台输出(虚线是分隔请求,它不在实际输出中) 问题答案: 不能保证以相同的方式序列化JSON对象,也不能保证属性以相同的顺序进行序列化,使用并不是测试对象相等性的好方法。 一个更好的例子是这样的函数(前一段时间在互联网上找到,希望我能感谢原始