如何确定 JSON 数据内容是否相同?(计算 JSON 哈希?)

Mar*_*sen 0 .net c# sql-server json ssis

如果我有两个 JSON 文件/表达式,我如何确定 JSON 的数据内容在功能上是否相同?

即比较应该忽略语法,如:

  • 所有空格/换行符(字符串之外)。
  • 对象成员的排序。
  • 等效的 unicode 字符(例如 \u0041 = A)。

我知道需要某种 JSON 解析器,但我不知道我的选择。我的数据在 SQL 服务器上,所以我可以直接使用 SQL JSON 函数和 SSIS 脚本组件 (C#/.Net)。

或者:有没有办法计算 JSON data-content 的哈希值,在计算哈希之前是否有最小化/统一 JSON 表达式的标准。

编辑:JSON 架构未知且未修复。

Mar*_*sen 5

根据评论中的反馈,这是我基于JTokenEqualityComparer. 该方法将通过使用 SSIS 脚本任务或 SQL CLR 应用于 SQL 服务器。

using System;
using Newtonsoft.Json.Linq;

namespace JSON_Comparison_Test
{
    class Program
    {
        static void Main(string[] args)
        {

            String jsonString1 = "{\"key1\":\"ABC\",\"key2\":\"DEF\"}";
            String jsonString2 = "{ \"key2\":\"DEF\" , \r\n \t  \"key1\" : \"\u0041BC\" }";

            var obj1 = JToken.Parse(jsonString1);
            var obj2 = JToken.Parse(jsonString2);

            var comparer = new JTokenEqualityComparer();
            var hashCode1 = comparer.GetHashCode(obj1);
            var hashCode2 = comparer.GetHashCode(obj2);

            Console.WriteLine(hashCode1.ToString()); // -323033486
            Console.WriteLine(hashCode2.ToString()); // -323033486

            Console.WriteLine(comparer.Equals(obj1, obj2)); // True
        }
    }
}
Run Code Online (Sandbox Code Playgroud)