Graeme_Grant
У меня есть вспомогательная функция для извлечения данных из JSON, которую я использую в своей статье: Работа с JSON в C# и VB[^]
Imports Newtonsoft.Json.Linq
Public Module JsonExtensions
<Extension>
Public Function FindTokens(containerToken As JToken, name As String) _
As List(Of JToken)
Dim matches = New List(Of JToken)()
FindTokens(containerToken, name, matches)
Return matches
End Function
Private Sub FindTokens(containerToken As JToken, name As String, _
matches As List(Of JToken))
If containerToken.Type = JTokenType.[Object] Then
For Each child As JProperty In containerToken.Children(Of JProperty)()
If child.Name = name Then
matches.Add(child.Value)
End If
FindTokens(child.Value, name, matches)
Next
ElseIf containerToken.Type = JTokenType.Array Then
For Each child As JToken In containerToken.Children()
FindTokens(child, name, matches)
Next
End If
End Sub
End Module
Затем, чтобы использовать, вы просто делаете что-то вроде::
Dim tags As List(Of Single) = _
JObject.Parse(rawJSON) _
.FindTokens("rating2") _
.Values(Of Single)() _
.ToList()
ОБНОВЛЕНИЕ: Вот полный пример для вас, который вы можете подключить к тестовому консольному приложению:
Imports System.Runtime.CompilerServices
Imports Newtonsoft.Json.Linq
Module Module1
Sub Main()
Dim rawJSON = "{
""results"": [{
""rating2"": 6.66666,
""downloads_min"": 5000000,
""klm"": [{
""top1"": ""mine""
},
{
""top2"": ""yours""
}]
},
{
""rating2"": 4.4444,
""downloads_min"": 505550000,
""klm"": [{
""top1"": ""2mine""
},
{
""top2"": ""2yours""
}]
},
{
""rating2"": 900000,
""downloads_min"": 505550000,
""klm"": [{
""top1"": ""mine""
},
{
""top2"": ""yours""
}]
}],
""number_results"": 263,
""has_next"": true,
""page"": 1,
""num_pages"": 132,
""limit"": 2
}"
Dim tags As List(Of Single) =
JObject.Parse(rawJSON) _
.FindTokens("rating2") _
.Values(Of Single)() _
.ToList()
For Each tag In tags
Console.WriteLine(tag)
Next
End Sub
End Module
Public Module JsonExtensions
<Extension>
Public Function FindTokens(containerToken As JToken, name As String) _
As List(Of JToken)
Dim matches = New List(Of JToken)()
FindTokens(containerToken, name, matches)
Return matches
End Function
Private Sub FindTokens(containerToken As JToken, name As String,
matches As List(Of JToken))
If containerToken.Type = JTokenType.[Object] Then
For Each child As JProperty In containerToken.Children(Of JProperty)()
If child.Name = name Then
matches.Add(child.Value)
End If
FindTokens(child.Value, name, matches)
Next
ElseIf containerToken.Type = JTokenType.Array Then
For Each child As JToken In containerToken.Children()
FindTokens(child, name, matches)
Next
End If
End Sub
End Module
И выход есть:
6.66666
4.4444
900000
Member 10285969
Я попробовал этот ваш код, но он не дал мне никакого результата. мое приложение немного отличается от этого, я просто использую ваш помощник json, но он не работает. я думал, что смогу использовать его для извлечения всего, что угодно