【问题标题】:How to find if a JToken is present in a JObject using c# [duplicate]如何使用c#查找JObject中是否存在JToken [重复]
【发布时间】:2018-12-19 01:49:27
【问题描述】:

我从第三方服务接收到一个 JObject 对象,其中包含如下所示的 JSON:

{
    {
        "topic": "asd",
        "id": "b87a5db6-01b5-4cc0-8fa7-832382ca3431",
        "eventType": "update",
        "subject": "/asd/task",
        "eventTime": "12/18/2018 4:46:20 PM",
        "data": {
            "auditId": "-9223372036854771584",
            "contextData": "{}",
            "eventType": null,
            "auditData": {
                "taskId": "22BC1515-39DF-4124-89EB-AD1468572F20",
                "user": "asd@ul.com",
                **"reminderDate": null,
                "startDate": null,
                "dueDate": null,**
                "taskStatusName": "NotScheduled"
            }
        },
        "dataVersion": "",
        "metadataVersion": "1"
    }
}

这个 JObject 可能有也可能没有以粗体突出显示的 JToken。

我需要查看传入的 JObject 中是否存在此类 JToken。

如果它们存在,那么我需要从它们中获取值。例如这里提醒日期、开始日期和到期日期 JToken 存在,所以我需要获取它们各自的值,在这个例子中是空的。

如果这些 Jtoken 不存在于 JObject 中,那么我需要从其他来源(如 DB)获取值。

【问题讨论】:

  • 欢迎来到 StackOverflow。感谢您提供定义明确的输入和所需输出示例。由于这是一个问答网站,而不是一个代码编写服务,因此最好还包括一些您尝试过的代码,以及它如何无法按照您想要的方式工作的描述。如果您根本不知道从哪里开始,我建议您阅读this
  • 这就是我想要做的: eventGridEvent["data"].SelectToken("auditData")["startDate"] != null 其中 eventGridEvent 是我的 JObject。这是检查此 JObject 中是否存在 startDate JToken 的正确方法吗?
  • 我会使用eventGridEvent.SelectToken("data.auditData.startDate") != null,因为如果没有dataauditData 属性,它会更优雅地处理事情。
  • 似乎是Json.NET get nested jToken value 的副本,它建议使用SelectToken(),或者在c# 6.0 或更高版本中,使用null 条件运算符。同意吗?
  • 感谢@StriplingWarrior

标签: c# json json.net


【解决方案1】:

要获得像 startDate 这样的属性,它会将其值作为字符串返回,如果没有找到则返回 null

check this

    string Text =
    @"{
    ""topic"": ""asd"",
    ""id"": ""b87a5db6-01b5-4cc0-8fa7-832382ca3431"",
    ""eventType"": ""update"",
    ""subject"": ""/asd/task"",
    ""eventTime"": ""12/18/2018 4:46:20 PM"",
    ""data"": {
    ""auditId"": ""-9223372036854771584"",
    ""contextData"": ""{}"",
    ""eventType"": null,
    ""auditData"": {
        ""taskId"": ""22BC1515-39DF-4124-89EB-AD1468572F20"",
        ""user"": ""asd@ul.com"",
        ""reminderDate"": null,
        ""startDate"": null,
        ""dueDate"": null,
        ""taskStatusName"": ""NotScheduled""
    }
    },
    ""dataVersion"": """",
    ""metadataVersion"": ""1""
    }"; 

    JObject response = JObject.Parse(Text);
    string startDate = (string) response ["data"]["auditData"]["startDate"];

【讨论】:

  • 感谢@Ahmed Ghoniem
猜你喜欢
  • 2020-05-15
  • 2013-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2022-11-04
  • 2012-01-04
相关资源
最近更新 更多