2017-10-01 5 views
0

2つのJSONファイル/式がある場合、のデータコンテンツが機能的に同等であるかどうかをどのように判断すればよいですか?JSONデータコンテンツが同一であるかどうかを判断する方法は? (JSONハッシュを計算する)

I.e. (文字列の外)

  • すべての空白/改行:比較ですがような構文を無視すべきです。
  • オブジェクトメンバーの順序。
  • 同等のユニコード文字(例:\ u0041 = A)。

何らかのJSONパーサーが必要であると認識していますが、私の選択肢はわかりません。私のデータはSQLサーバー上にあるので、SQL JSON関数とSSISスクリプトコンポーネント(C#/ .Net)を直接利用できます。

または、JSON データコンテンツのハッシュ値を計算する方法はありますか。ハッシュを計算する前にJSON式を最小化/一元化するための基準はありますか。

編集:JSONスキーマは不明であり、修正されていません。

+0

デシリアライズして比較しますか? – Plutonix

+0

また、SQL側で実行することを検討してください。 –

+0

@Plutonixあなたは最小の例を提供できますか?クラス定義が必要ですか? –

答えて

1

コメントのフィードバックに基づいて、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 
     } 
    } 
} 
関連する問題