如何在JavaScript中检查JSON是否已更改?

3

我在网页加载时加载JSON,当用户在客户端中执行操作时,它会发生变化。当用户导航离开时,想要查看JSON是否已更改。在JavaScript中,是否有一种方法可以创建哈希字符串并作为整体进行比较,而不是逐个比较JSON中的值?


谁生成了这两个JSON?(旧的和新的)它们都是由JS代码生成的吗? - xanatos
1
由于JSON实际上只是JS中的一个字符串,因此您可以将最终字符串与原始字符串进行简单比较。但是,如果在两者之间解析JSON、修改对象,然后将对象转换回JSON,则不能保证属性将按相同顺序列出。但是,解析原始JSON字符串并使用JS将对象转换回JSON应该可以避免这个问题。 - Felix Kling
@xanatos 当用户使用应用程序时,服务器会返回一个 JSON 数据,并在用户操作期间不断更新。 - Nish
@FelixKling 我会按照你说的使用 JSON.stringify。 - Nish
3个回答

10
尝试使用数据的字符串版本
例如:
JSON.stringify(orig) == JSON.stringify(current)

注意:在此情况下,您需要保留原始 JSON 的深拷贝或其字符串化版本,还有可能出现误报的情况,因为键的顺序可能会改变。
对于不支持本地 JSON 的浏览器,您可能需要使用类似 json2 的库。

2
“键的顺序可能会改变”,我认为这只会发生在原始JSON是在其他地方生成的情况下,例如PHP脚本。对相同数据调用JSON.stringify应该每次都产生相同的结果。相关:https://dev59.com/42ox5IYBdhLWcg3w1X2-。我希望MDN指的是引擎之间的差异,同一引擎应该始终产生相同的结果。 - Felix Kling
有没有办法在不保留整个原始文件的情况下完成?是否可以只保留原始文件的哈希值,然后与新文件的哈希值进行比较? - Kwhitejr

6

另外,还有一种方法:

将两个 JSON 分配给两个对象 a 和 b。现在,你可以使用underscorejslodash 函数进行深度相等比较。

_.isEqual(a, b)

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接