【问题标题】:Compare Property values of two json objects in c#比较c#中两个json对象的属性值
【发布时间】:2021-03-01 11:14:48
【问题描述】:

我有两个像下面这样的 json 对象,

Json 1:

{
"data": {
  "firstName": "xxx",
  "lastName": "yyy",
  "age": "29"
}
}

Json 2:

{
 "data": {
    "firstName": "aaa",
    "lastName": "yyy",
    "age": "30",
    "location": "USA"
},
"meta": {
  "browser": "chrome",
  "ip": "999.999.999"
    }
}

如何比较 json 1 和 json 2 的属性,如果值相等则返回 bool 值?

从上面的示例中,两个 json 对象中的 firstName 值不同,因此结果将返回 bool 值 false ,否则返回 true。

请帮忙,提前谢谢!!!

【问题讨论】:

  • 反序列化,比较,返回结果
  • 请注意,没有 JSON objects 之类的东西。它们是字符串
  • 请注意,[asp.net] 标签用于 ASP.NET(框架),[asp.net-core] 用于 ASP.NET(核心)。我希望它们是相互排斥的,所以看到两者有点奇怪,并且会使问题变得不清楚。无论如何,它们与此问题无关,因此我已将其删除。
  • @Cid:我认为引用 JSON 对象是完全合理的。你会反对使用术语“XML 元素”的人吗? “JSON 对象”是与之平行的概念——“对象”是 JSON RFC 中使用的术语:tools.ietf.org/html/rfc8259#section-4。例如,可以在代码中表示 JSON 对象,而无需使用 Json.NET 中的 JObject 反序列化为特定于模式的 .NET 类。
  • @Cid:它们是在 JSON RFC 中称为“对象”的实体。因此,在在 JSON 的上下文中(而不是在编程语言表示的上下文中)引用它们时,我认为将它们称为对象是很好的。它们在该上下文中对象。同样,您是否尝试“纠正”任何提到 XML 元素的人?完全一样,只是在这种情况下“对象”被重载,而“元素”不是。

标签: c# json json.net


【解决方案1】:

方法 #1 - 使用来自 Newtonsoft.Json 库的 JObject

var json1 = File.ReadAllText("json1.json");
var json2 = File.ReadAllText("json2.json");

var jObj1 = JObject.Parse(json1);
var jObj2 = JObject.Parse(json2);

if (jObj1["data"]["firstName"] != null && jObj2["data"]["firstName"] != null && jObj1["data"]["firstName"].ToString() == jObj2["data"]["firstName"].ToString())
{
    //condition is true
    Console.WriteLine("true");
}
else
{
    //condition is false
    Console.WriteLine("false");
}

方法 #2 - 使用来自 Newtonsoft.Json 库的 ModalJsonConvert。我已经使用json2csharp 将 json 转换为 c# 类

public class Data
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string age { get; set; }
    public string location { get; set; }
}

public class Meta
{
    public string browser { get; set; }
    public string ip { get; set; }
}

public class Root
{
    public Data data { get; set; }
    public Meta meta { get; set; }
}

var jObj1 = JsonConvert.DeserializeObject<Root>(json1);
var jObj2 = JsonConvert.DeserializeObject<Root>(json2);

if (jObj1.data.firstName.Equals(jObj2.data.firstName))
{
    Console.WriteLine("true");
}
else
{
    Console.WriteLine("false");
}

【讨论】:

  • 如果我是你,我会指定你使用的是 Newtonsoft.Json (newtonsoft.com/json),但其他答案很好。
  • @Mafii,感谢您的意见。当我发布新内容时我会记住这一点:)
  • @KrishnaMuppalla 在我的场景中 json 1 属性会像第二次请求一样随机变化,它可能(或)可能不包含 firstName 属性。那时我会在执行 if 条件时出错。
  • @Vicky,那么我建议使用模型和Jsonconvert ..我已经更新了帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多