我有一些json并使用 json.net 解析内容。首先,我使用 JToken 并将帖子中的字段拆分为对象列表,然后从每个对象中读取值。问题是其中一些对象有时具有字段,有时没有,并且不确定如何防止调用 nullexception 错误。下面是 json 示例:
{"id": "dfdksfjaisdfdsjfksdjdfsdafernd"}
{"body": "test data for parsing"}
{"object": { "summary":"hello test data you trouble maker", "id" :"problem stuff",
"link": "http://testdata.com",
"objecttype": "link"
}}
{"user": { "name": "Joe Somebody", "age":"43", "location": { "name": "outer space"},
}
}
现在在某些帖子中,用户对象中不存在位置字段,这导致我的代码中出现空错误,如下所示,有时对象对象采用不同的格式,如下所示:
{"id": "dfdksfjaisdfdsjfksdjdfsdafernd"}
{"body": "test data for parsing"}
{"object": { "object":
{"summary":"hello test data you trouble maker", "id" :"problem stuff",
"link": "http://testdata.com",
"objecttype": "link"
}
}}
{"user": { "name": "Joe Somebody", "age":"43",
}
}
现在,如果我的代码如下:
Dim results As List(Of JToken) = jobj.Children().ToList
If results.Count = 0 Then
Exit Sub
End If
For Each item As JProperty In results
item.CreateReader()
If item.Name = "id" Then
id = item.Value
End If
If item.Name = "actor" Then
author = item.Value("name").ToString
location = item.Value("location").Item("name").ToString
age = item.Value("age").ToString
End If
If item.Name = "object" Then
htext = item.Value("summary").ToString
csubject = item.Value("objectType").ToString
End If
Next
然后,如果位置和对象不同,则此代码将不起作用。 那么我如何检查位置字段是否存在,以及对象路径是否与摘要字段之前的另一个对象不同。
编辑:
好吧,以为我想通了
If Not item.Value("location") Is Nothing Then
bla bla bla
好的,
我想它确实有效并且格式错误的 json 出现空异常:
If Not item.Value("location") Is Nothing Then
bla bla bla
对象也是如此
If Not item.Value("summary") Is Nothing Then
bla bla bla
else
htext = item.Value("object").Item("summary").tostring