在vb.net中解析Json
我希望在vb.net中循环使用以下Json,并提取问题和结果。我曾尝试使用Newtonsoft.json,但尽管JSONlint验证json,但还是出现了错误。实现这一目标的正确方法是什么在vb.net中解析Json,json,vb.net,Json,Vb.net,我希望在vb.net中循环使用以下Json,并提取问题和结果。我曾尝试使用Newtonsoft.json,但尽管JSONlint验证json,但还是出现了错误。实现这一目标的正确方法是什么 { "Vehicle_Check": [ 19, { "question": "Brakes", "result": "OK", "Fault": "" }, {
{
"Vehicle_Check": [
19,
{
"question": "Brakes",
"result": "OK",
"Fault": ""
},
{
"question": "Water Levels",
"result": "OK",
"Fault": ""
},
{
"question": "Horn",
"result": "OK",
"Fault": ""
},
{
"question": "Washers",
"result": "OK",
"Fault": ""
},
{
"question": "Wipers",
"result": "OK",
"Fault": ""
},
{
"question": "Indicators",
"result": "OK",
"Fault": ""
},
{
"question": "Reflectors",
"result": "OK",
"Fault": ""
},
{
"question": "Oil Levels",
"result": "OK",
"Fault": ""
},
{
"question": "Lights",
"result": "OK",
"Fault": ""
},
{
"question": "Mirrors",
"result": "OK",
"Fault": ""
},
{
"question": "Steering",
"result": "OK",
"Fault": ""
},
{
"question": "Tyres Wheels",
"result": "OK",
"Fault": ""
},
{
"question": "Battery",
"result": "OK",
"Fault": ""
},
{
"question": "Fuel or Oil Leaks",
"result": "OK",
"Fault": ""
},
{
"question": "Other",
"result": "OK",
"Fault": ""
}
]
}
我用来解析Json的代码是:
Dim o As JObject = JObject.Parse(VCItem.Check)
Dim results As List(Of JToken) = o.Children().ToList
For Each item As JProperty In results
item.CreateReader()
Select Case item.Name
'process data here
End Select
Next
这仅返回最后一个元素:
{[
19,
{
"question": "Other",
"result": "OK",
"Fault": ""
}
]}
实际上,它返回的是第一个和最后一个元素。根据您发布的内容,19是数组中的第一项,这无论如何都不合适 试试这个(是的,我知道它看起来很可怕),但我也不得不从列表中删除19,因为它不是一个对象,而是一个字符串。数组中有不同的类型,如果必须保留该字符串,则需要对其进行测试。我正在努力寻找一种更好的方式来阅读JSON,但这比我希望的要长
Dim o As JObject = JObject.Parse(VCItem)
Dim results As List(Of JToken) = o.Children().ToList
For Each item As JProperty In results
item.CreateReader()
If item.Value.Type = JTokenType.Array Then
Dim results2 As List(Of JToken) = item.Value.ToList
For Each subitem As JObject In results2
Dim results3 As List(Of JToken) = subitem.Children().ToList
For Each temp2 As JProperty In results3
temp2.CreateReader()
MsgBox(temp2.Name)
MsgBox(temp2.Value)
Next
Next
End If
Next
找到了一种更简单的方法来显示值,但仍然取决于JSON字符串的结构(在这里找到了更简单的方法:)
您会遇到什么错误?我们可以看到您尝试用于反序列化的代码吗?@user1898898您应该编辑您的问题并将代码放在那里,而不是放在注释中。
Select Case
代码中有什么?您在这里将过程数据的结果
逻辑存储到变量中的是什么?换句话说,什么只包含最后一个元素?item.Name包含:{[19,{“问题”:“其他”,“结果”:“确定”,“错误”:“}]}
Dim o As JObject = JObject.Parse(VCItem)
Dim results As List(Of JToken) = o.Children().ToList
For Each item As JProperty In results
item.CreateReader()
If item.Value.Type = JTokenType.Array Then
For Each subitem As JObject In item.Values
MsgBox(subitem("question"))
MsgBox(subitem("result"))
MsgBox(subitem("Fault"))
Next
End If
Next