如何判断json的节点是否存在

本文关键字:节点 是否 存在 json 何判断 判断 | 更新日期: 2023-09-27 18:19:45

我正在使用Newtonsoft.Json将Json字符串反序列化为Object,但我无法判断节点是否为null。例如jo["data"]["prevtime"],有时json具有["prevtime"]的节点,有时不具有["prevtime"]。如果["prevtime"]null,它将报告一个错误。

var jo = JObject.Parse(content);
if (jo["data"].ToString() == "")
    return new StatusCollection();
var jInfo = jo["data"]["info"];
StatusCollection list = new StatusCollection();
Status status = null;
if (jInfo != null)
{
    foreach (var j in jInfo.Children())
    {
       if (jo["data"]["prevtime"] != null) 
       {
           status.Nexttime = jo["data"]["nexttime"].ToString();
           status.Prevtime = jo["data"]["prevtime"].ToString();
       }
       status = j.ToObject<Status>();
       if (!string.IsNullOrEmpty(status.Head))
       {
           status.Head += "/50";
       }
       if (!string.IsNullOrEmpty(status.From))
       {
           status.From = "来自" + status.From;
       }
       list.Add(status);
    }
}

如何判断json的节点是否存在

在当前版本中,它将类似于:

if (jo["data"].Select***Token***("prevtime") != null) 
{
        status.Prevtime = jo["data"].Value<string>("prevtime");
        status.Nexttime = jo["data"].Value<string>("nexttime");
}

尝试选择您想要的令牌,并且有一个属性可以获得令牌值

if (jo["data"].Select("prevtime") != null) 
{
        status.Prevtime = jo["data"].Value<string>("prevtime");
        status.Nexttime = jo["data"].Value<string>("nexttime");
}

JSON.NET文档:

链路1

链路2