我有两个json对象,我比较它们,但它是通过键和值进行比较的, 我想仅按键比较两个 json 对象, 我该怎么做?
这是我的代码:
var jdp = new JsonDiffPatch();
var areEqual2 = jdp.Diff(json1, json2);
你可以创建和使用这样的类:
class CustomComparer : IEqualityComparer<YourObjectType>
{
public bool Equals(YourObjectType first, YourObjectType second)
{
if (first == null | second == null) { return false; }
else if (first.Hash == second.Hash)
return true;
else return false;
}
public int GetHashCode(YourObjectType obj)
{
throw new NotImplementedException();
}
}
如果你想在 2 个 json 之间得到一个不同的:
private List<string> GetDiff(List<string> path1, List<string> path2)
{
List<string> equal=new List<string>();
foreach (var j1 in path1)
{
foreach (var j2 in path2)
{
if (j1 == j2)
{
equal.Add(j1);
}
}
}
return equal;
}
实现此目的的一种方法是检索 json 中所有键的名称/路径并比较列表。例如
var path1 = GetAllPaths(json1).OrderBy(x=>x).ToList();
var path2 = GetAllPaths(json2).OrderBy(x=>x).ToList();
var result = path1.SequenceEqual(path2);
其中 GetAllPath 定义为
private IEnumerable<string> GetAllPaths(string json)
{
var regex = new Regex(@"[d*].",RegexOptions.Compiled);
return JObject.Parse(json).DescendantsAndSelf()
.OfType<JProperty>()
.Where(jp => jp.Value is JValue)
.Select(jp => regex.Replace(jp.Path,".")).Distinct();
}
示例演示