我对Newtonsoft.Json有问题。我正在尝试从URL解析JSON,但出现错误。这是JSON:
[
{
"ID": "0",
"Nome": "we",
"Data": "2013-09-16",
"Orario": "00:00:16",
"Prestazione": "dfg",
"Stato": "dfg",
"Numero_Telefono": "dfg"
},
{
"ID": "0",
"Nome": "fg",
"Data": "2013-09-26",
"Orario": "00:00:00",
"Prestazione": "",
"Stato": "",
"Numero_Telefono": ""
},
{
"ID": "1",
"Nome": "davide",
"Data": "2013-09-26",
"Orario": "00:00:16",
"Prestazione": "ds",
"Stato": "sd",
"Numero_Telefono": "3546"
}
]
这是我正在使用的代码:
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Try
request = DirectCast(WebRequest.Create("http://nhd.altervista.org/connectDb.php"), HttpWebRequest)
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
Dim rawresp As String
rawresp = reader.ReadToEnd()
Dim jResults As JObject = JObject.Parse(rawresp)
Dim results As List(Of JToken) = jResults.Children().ToList()
For Each item As JProperty In results
item.CreateReader()
MsgBox(item.Value("img")) ' because my tag in json is img
Next
Catch ex As Exception
Console.WriteLine(ex.ToString)
MsgBox(ex.ToString)
Finally
If Not response Is Nothing Then response.Close()
End Try
这是我尝试解析JSON时收到的错误:
Newtonsoft.Json.JsonReaderException: Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path '', line 1, position 1.
你能帮我解决这个问题吗?
您收到此错误的原因是您正在使用JObject.Parse
,它需要一个JSON对象,但是您的JSON包含一个数组。要更正此问题,请JArray.Parse
改用。
但是,还有另一个问题:您的其余代码未设置为正确处理结果。由于结果是对象数组,因此For Each
循环需要包含JObject
项目,而不是JProperty
项目。拥有每个项目后,便可以根据需要从它们中获取属性。
我不确定您要使用该item.CreateReader()
行做什么,因为您没有使用它的返回值做任何事情,而且您似乎也不需要。同样,我也对您的代码感到困惑MsgBox(item.Value("img"))
,因为JSON中的任何地方都没有“ img”属性。因此,它将始终为null。
这是一些经过更正的代码,它们将解析JSON并显示结果中每个对象的所有属性。这应该为您提供一个起点。
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Try
request = DirectCast(WebRequest.Create("http://nhd.altervista.org/connectDb.php"), HttpWebRequest)
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
Dim rawresp As String
rawresp = reader.ReadToEnd()
Dim jResults As JArray = JArray.Parse(rawresp)
Dim results As List(Of JToken) = jResults.Children().ToList()
For Each item As JObject In results
Dim demo As String = ""
For Each prop As JProperty In item.Properties()
demo = demo + prop.Name + " = " + prop.Value.ToString() + vbCrLf
Next
MsgBox(demo)
Next
Catch ex As Exception
Console.WriteLine(ex.ToString)
MsgBox(ex.ToString)
Finally
If Not response Is Nothing Then response.Close()
End Try
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句