如何仅按键比较两个 json 对象?



我有两个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();
}

示例演示

相关内容

  • 没有找到相关文章