我试图使用vb.net Windows窗体应用程序来解析一些JSON代码。我的代码构建得很好并且编译,但是当我点击我的按钮时,我得到了这个例外:
Newtonsoft.Json.JsonReaderException:'解析NaN值时出错。路径'',第1行,第1位。'
异常指向我的代码末尾的这一行:
For Each item As JObject In JArray.Parse(jsonObjects.SelectTokens("items").ToString)
我试图解决它,但我不知道该怎么做了。这是我的代码:
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim jsonString As String = "{""id"":1, ""name"":""tom"",
""items"":[
{""name"":""apple"", ""count"":1 },
{""name"":""milk"", ""count"":2 }
]
}"
Dim jsonObjects As JObject = JObject.Parse(jsonString)
Console.WriteLine("id:" & jsonObjects.SelectTokens("id").ToString)
Console.WriteLine("name:" & jsonObjects.SelectTokens("name").ToString)
Console.WriteLine("items:" & jsonObjects.SelectTokens("items").ToString)
'Dim jsonArray As JArray = JArray.Parse(jsonObjects.SelectTokens("items").ToString)
For Each item As JObject In JArray.Parse(jsonObjects.SelectTokens("items").ToString)
Console.WriteLine("item:" & item.SelectTokens("name").ToString)
Next
End Sub
End Class
I am trying to ... parse through some JSON
在循环开始之前到达异常之前,这不会导致任何非常有用的东西:
Console.WriteLine("id:" & jsonObjects.SelectTokens("id").ToString)
SelectTokens
返回IEnumerable(Of Newtonsoft.Json.Linq.JToken)
。试图用ToString
显示它只会导致:
Newtonsoft.Json.Linq.JsonPath.FieldFilter+<ExecuteFilter>d__0
如果您想要整个JSON中的多个项目,那么将它反序列化为.NET对象或集合可能更容易,但这不是您所要求的。这将列出Tom拥有的项目:
Dim jobj = JObject.Parse(Candyjson)
' print the Id, name and how many items there are
Console.WriteLine("Id: {0} Name: {1} has {2} Items", jobj("id"), jobj("name"),
jobj("items").Count)
' print each item name and how many there are
For n As Int32 = 0 To jobj("items").Count - 1
Console.WriteLine("Item: {0}, Count: {1}",
jobj("items")(n)("name"),
jobj("items")(n)("count")
)
Next
结果:
Id:1姓名:tom有2件商品 项目:苹果,数量:1 项目:牛奶,数量:2
一解析JSON,生成的JObject将包含各种其他内容,具体取决于JSON中的内容。如果你设置一个断点并检查jobj
,结果将与你的JSON(字符串)看起来很相似,但它是一个你可以查询的形式: