访问数组中的项目
Accessing an item inside an array
请参阅下面的 JSON,我已使用 https://jsonlint.com/:
对其进行了验证
{
"meta": {
"limit": 3,
"count": 3
},
"data": [{
"id": "1",
"MoreInformation": {
"id2": "22"
},
"type": "Person"
},
{
"id": "2",
"MoreInformation": {
"id2": "42"
},
"type": "Person"
},
{
"id": "3",
"MoreInformation": {
"id2": "99"
},
"type": "Person"
}
]
}
请看下面的代码:
Module Module1
Sub Main()
Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
Dim jo As JObject = JObject.Parse(json)
Dim a As JArray = CType(jo("data"), JArray)
Dim list As New List(Of Person)
For Each item In a.Children()
Dim itemProperties = item.Children(Of JProperty)()
Dim person As New Person
person.id1 = itemProperties.FirstOrDefault(Function(x) x.Name = "id")
person.id2 = itemProperties.FirstOrDefault(Function(x) x.Name = "id2")
list.Add(person)
Next
End Sub
End Module
Public Class Person
Public Property id1
Public Property id2
End Class
我希望输出是三个人的列表。
这一行有问题:
person.id2 = itemProperties.FirstOrDefault(Function(x) x.Name = "id2")
它总是returns什么都没有。如何使用 JSON?
中的 id2 填充 person.id2
更新
这个有效:
Sub Main()
Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
Dim jo As JObject = JObject.Parse(json)
Dim a As JArray = CType(jo("data"), JArray)
Dim list As List(Of Person) = JsonConvert.DeserializeObject(Of List(Of Person))(a.ToString)
Console.WriteLine("got here")
End Sub
如果我将 类 更改为:
Public Class Person
Public Property id
Public Property MoreInformation
End Class
Public Class MoreInformation
Public Property id2
End Class
但是,我仍然不知道如何让我原来 post 中的代码正常工作。
我不确定这是否是您想要的答案,但我尝试了如下代码。
Try
Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
Dim jo As JObject = JObject.Parse(json)
Dim a As JArray = CType(jo("data"), JArray)
Dim list As New List(Of Person)
For Each item In a.Children()
Dim itemProperties = item.Children(Of JProperty)()
Dim itemProperties2 = item.SelectToken("MoreInformation").Children(Of JProperty)()
Dim person As New Person
person.id1 = itemProperties.FirstOrDefault(Function(x) x.Name = "id")
person.id2 = itemProperties2.FirstOrDefault(Function(x) x.Name = "id2")
list.Add(person)
Next
For Each item In list
Debug.WriteLine("id1:" & item.id1.ToString & " id2:" & item.id2.ToString)
Next
Catch ex As Exception
MsgBox(ex.ToString)
End Try
请参阅下面的 JSON,我已使用 https://jsonlint.com/:
对其进行了验证{
"meta": {
"limit": 3,
"count": 3
},
"data": [{
"id": "1",
"MoreInformation": {
"id2": "22"
},
"type": "Person"
},
{
"id": "2",
"MoreInformation": {
"id2": "42"
},
"type": "Person"
},
{
"id": "3",
"MoreInformation": {
"id2": "99"
},
"type": "Person"
}
]
}
请看下面的代码:
Module Module1
Sub Main()
Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
Dim jo As JObject = JObject.Parse(json)
Dim a As JArray = CType(jo("data"), JArray)
Dim list As New List(Of Person)
For Each item In a.Children()
Dim itemProperties = item.Children(Of JProperty)()
Dim person As New Person
person.id1 = itemProperties.FirstOrDefault(Function(x) x.Name = "id")
person.id2 = itemProperties.FirstOrDefault(Function(x) x.Name = "id2")
list.Add(person)
Next
End Sub
End Module
Public Class Person
Public Property id1
Public Property id2
End Class
我希望输出是三个人的列表。
这一行有问题:
person.id2 = itemProperties.FirstOrDefault(Function(x) x.Name = "id2")
它总是returns什么都没有。如何使用 JSON?
中的 id2 填充 person.id2更新
这个有效:
Sub Main()
Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
Dim jo As JObject = JObject.Parse(json)
Dim a As JArray = CType(jo("data"), JArray)
Dim list As List(Of Person) = JsonConvert.DeserializeObject(Of List(Of Person))(a.ToString)
Console.WriteLine("got here")
End Sub
如果我将 类 更改为:
Public Class Person
Public Property id
Public Property MoreInformation
End Class
Public Class MoreInformation
Public Property id2
End Class
但是,我仍然不知道如何让我原来 post 中的代码正常工作。
我不确定这是否是您想要的答案,但我尝试了如下代码。
Try
Dim json As String = "{""meta"": {""limit"": 2,""count"": 2},""data"": [{""id"": ""1"",""MoreInformation"": {""id2"": ""22""},""type"": ""Person""},{""id"": ""2"",""MoreInformation"": {""id2"": ""42""},""type"": ""Person""},{""id"": ""3"",""MoreInformation"": {""id2"": ""99""},""type"": ""Person""}]}"
Dim jo As JObject = JObject.Parse(json)
Dim a As JArray = CType(jo("data"), JArray)
Dim list As New List(Of Person)
For Each item In a.Children()
Dim itemProperties = item.Children(Of JProperty)()
Dim itemProperties2 = item.SelectToken("MoreInformation").Children(Of JProperty)()
Dim person As New Person
person.id1 = itemProperties.FirstOrDefault(Function(x) x.Name = "id")
person.id2 = itemProperties2.FirstOrDefault(Function(x) x.Name = "id2")
list.Add(person)
Next
For Each item In list
Debug.WriteLine("id1:" & item.id1.ToString & " id2:" & item.id2.ToString)
Next
Catch ex As Exception
MsgBox(ex.ToString)
End Try