比较 2 个 JSON 对象 [重复]

2023-12-15

可能的重复:
JavaScript 中的对象比较

是否有任何方法可以接受 2 个 JSON 对象并比较这两个对象以查看是否有任何数据发生更改?

Edit

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

  1. JSON 对象定义为

    “一组无序的名称/值对。 对象以 {(左大括号)开头 并以 }(右大括号)结尾。每个 名称后跟 :(冒号)和 名称/值对由 , 分隔 (逗号)。”--json.org

  2. 简而言之,我的目标是能够比较 2 个 JSON 对象文字。

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

我相信我正在寻找一种能够:

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

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

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

From http://twobit.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))
   ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较 2 个 JSON 对象 [重复] 的相关文章

随机推荐

  • Visual Studio 2012 Web Publish 不复制文件

    我在 VS 2012 中有一个 Web 应用程序项目 当我使用 Web 发布工具时 它会成功构建 但不会将任何文件复制到发布目标 在本例中为文件系统 如果我查看构建输出 我可以看到所有内容都被正确复制到 obj Release Packag
  • 关于Erlang语言中“if”的用法

    这是我的代码 lists foreach fun Method Value gt ServerName method to servername Method if Value 0 andalso whereis ServerName un
  • 如何“停靠”/附加 winforms 表单

    我想将同一个应用程序中的两个表单相互附加 就像一些音乐播放器 例如 winamp 所做的那样 其中窗口可以在一侧分离或附加在一起 然后移动一个窗口电影另一个窗口也 也许有一个更好的术语来描述这种行为 有任何模式或代码示例可以做到这一点吗 看
  • 使用 JavaScript 仅允许 HTML 输入中的特定字符

    我编写了一些 JavaScript 和 jQuery 代码 它们只接受文本框中的数字输入 但这还不够 我需要将输入限制为某些数字 此文本框需要处理 SSN 号码 瑞典 SSN 并且必须以 19 或 20 开头 我想强制它以这些号码开头 但我
  • Spring 会话 + Spring Web 套接字。根据会话 ID 向特定客户端发送消息

    我已关注Quetion1 and Quetion2从堆栈溢出向特定客户端发送消息 基于其sessionId但找不到成功 下面是我的示例 RestController 类 RestController public class SpringS
  • Swift 可选 - 不同的解包方式

    我就直接说吧 有什么区别 var test String test this is an optional string if test nil println test IS NOT nil else println test is ni
  • 如何定义一个可以有多种形式的javascript属性?

    例如 IE 表格控件可以按如下方式使用 recordset fields i name recordset fields count 如何使用 javascript 定义 fields 属性 当我定义 this fields new Fie
  • iOS如何实现协议的@property

    我的理解是 协议指定方法名称 而符合该协议的其他人则负责方法的实现 那么协议中声明的属性又如何呢 实现一个属性是否意味着实现它的setter和getter 属性是一个或两个具有特定签名的方法的奇特名称 Objective C 为其提供了一个
  • 如何更改 Xamarin 表单中的 Picker 字体颜色和大小?

    我是 Xamarin 新手 目前正在 Xamarin Forms PCL 中做一个项目 有没有办法改变Picker的字体颜色和大小
  • 确定哪个依赖数组变量导致 useEffect 钩子触发

    有没有一种简单的方法可以确定a中的哪个变量useEffect的依赖数组触发函数重新触发 简单地注销每个变量可能会产生误导 如果a是一个函数并且b是一个对象 它们在记录时可能看起来相同 但实际上不同并导致 useEffect 火灾 例如 Re
  • 堆溢出的危险?

    我有一个关于堆溢出的问题 据我所知 如果堆栈变量超出其缓冲区 它可能会覆盖 EIP 和 ESP 值 例如 使程序跳转到编码器不希望它跳转的位置 据我了解 由于向后小端存储 其中数组中的字符 向后 存储 从最后到第一个 这似乎表现得像这样 另
  • PHP中的CSRF(跨站请求伪造)攻击示例及预防

    我有一个网站 人们可以这样投票 http mysite com vote 25 这将对第 25 项进行投票 我只想将此功能提供给注册用户 并且仅当他们愿意时才提供 现在我知道当有人在网站上忙碌时 有人给他们一个像这样的链接 http mys
  • 如何将 arrayList.toString() 转换为实际的 arraylist

    在我的软件中 由于没有Array数据类型输入SQLite 我保存了我的ArrayList as a String 现在我需要使用我的数组并希望将其转换回 ArrayList 我该怎么做 这里有一个例子 ArrayList
  • 如何使用谷歌地图V2在android中使用MapView?

    我想在我的活动中显示地图 在谷歌地图 V1 中我们使用
  • 使用 CSS 制作 Google API 地图标记动画? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 http bluefaqs com 2016 02 how to animate a map location marker with css 显示脉动的 GPS 位置蓝点 位于
  • SQL 点表示法

    有人可以向我解释一下 SQL Server 如何使用点表示法来识别桌子的位置 我一直以为地点是Database dbo Table但我看到代码中有其他东西代替dbo 就像是 DBName something Table有人可以解释一下吗 这
  • 在 Mac 上使用 Selenium WebDriver 在 Firefox 中打开新选项卡

    我刚刚安装了 Selenium Web Driver 并尝试了一下 效果很好 我的用例可以描述如下 在具有伪 X 服务器 Xvfb 的服务器上启动 Firefox 新的 Driver Firefox 对象 打开 10 个选项卡并在每个选项卡
  • upload_max_filesize、php.ini 和 Google App Engine

    我有一个在 Google App Engine 上运行的 PHP 5 5 应用程序 它基于 CodeIgniter 框架 最近我开始需要上传超过 8 MB 的文件 我收到以下错误 PHP Warning POST Content Lengt
  • 将 LocalDate 转换为 LocalDateTime 或 java.sql.Timestamp

    我正在使用 JodaTime 1 6 2 我有一个LocalDate我需要转换为 Joda LocalDateTime or a java sqlTimestamp用于或映射 这样做的原因是我已经弄清楚如何在LocalDateTime an
  • 比较 2 个 JSON 对象 [重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中的对象比较 是否有任何方法可以接受 2 个 JSON 对象并比较这两个对象以查看是否有任何数据发生更改 Edit 审查完评论后 需要进行一些澄清 JSON 对象定义为 一组无序