2017-04-16 153 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 - 这是一个不同的问题。只需将其作为适当的问题发布,而不是作为评论。 –