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

问题描述:

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

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); 
    } 
} 
+0

这条线将报告错误[IF(!祚[ “数据”] [ “prevtime”] = NULL)]如果没有[ “prevtime” 在乔[”数据”]。 – 2012-01-09 14:02:27

尽量选择你想要的标记,并有一个属性来获取令牌值

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

+0

现在工作正常,非常感谢。 – 2012-01-10 02:49:10

在当前版本,它会像:

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