2017-04-16 196 views
1

我有兩個json文件。無論元素的格式和順序如何,它們都應該是相同的。檢查兩個json是否相同

例如因爲屬性和陣列是相同的,只是它們的順序和格式類型這兩種jsons是等效的是不同的:

{ 
    "type" : "integer", 
    "values": [ 
    { 
     "value": 1 
    }, 
    { 
     "value": 2 
    } 
    ] 
} 

{ 
    "values": [ 
    { "value": 1 }, { "value": 2 } 
    ], 
    "type" : "integer" 
} 

如果我將它們存儲爲兩個單獨的字符串和我比較他們,顯然比較會說他們是不同的。相反,我想從語義的角度來檢查它們是否是等價的,並且它們是因爲它們具有相同的屬性,並且相應的數組是相同的。

在C#中有一種方法來檢查這兩個json是否等價,如果我將它們存儲在兩個單獨的字符串中?

+1

反序列化並比較結果 –

+0

有沒有辦法在不事先知道JSON文件格式的情況下執行此操作?因爲他們的模式沒有預先定義,我應該能夠做到這一點,而不管jsons中包含的數據的類型。 – Jepessen

+1

檢查這個回答:http://stackoverflow.com/a/31926367/172769 –

回答

2

使用Newtonsoft.Json NuGet包的DeepEquals

using Newtonsoft.Json.Linq; 

var jsonText1 = File.ReadAllText(fileName1); 
var jsonText2 = File.ReadAllText(fileName2); 

var json1 = JObject.Parse(jsonText1); 
var json2 = JObject.Parse(jsonText2); 

var areEqual = JToken.DeepEquals(json1, json2); 
+0

難道你不知道,它可以在比較JArrays時進行排序嗎? – tsul

+0

@tsul - 這是一個不同的問題。只需將其作爲適當的問題發佈,而不是作爲評論。 –