如何判断json的节点存在

时间:2012-01-09 13:47:24

标签: c# json json.net

我正在使用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);
    }
}

2 个答案:

答案 0 :(得分:3)

在当前版本中,它会像:

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

答案 1 :(得分:2)

尝试选择所需的令牌,并且有一个属性可以获取令牌值

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

JSON.NET文档:

Link 1

Link 2