Как получить значения в виде строк от указанного ключа c в паре ключ-значение JSON в VB. net? - PullRequest
1 голос
/ 20 января 2020

Я получаю файл JSON (около 1300 строк) из запроса API HTTP GET. Вот небольшой примерный отрывок:

{
      "platformId": 3,
      "platformName": "pc",
      "platformNameLong": "PC"
}

Я использую эти данные и преобразовываю их в объект (источник - результат запроса API):

Imports Newtonsoft.Json

,

Dim Data As New Statistics
    Data = JsonConvert.DeserializeObject(Of Statistics)(source)

и

Public Class Statistics
    Public Property platformId As Integer
    Public Property platformName As String
    Public Property platformNameLong As String
End Class

, и это работает, и я могу использовать ссылку на этот объект позже в следующем примере.

Label1.Content = Data.platformNameLong

Теперь я получил JSON вот так:

{
 "lifeTimeStats": [
    {
      "key": "Score",
      "value": "7,919,327"
    },
    {
      "key": "Matches Played",
      "value": "20105"
    ]
}

Как мне получить значение из спецификатора c ключ (в паре ключ-значение часть JSON) в мой объект (или в виде строкового значения)?

Примечание. Некоторые метки в JSON имеют то же имя, что и ключи в части ключ-значение; есть ли способ просто получить значения для ключей в рамках «lifeTimeStats»?

Пример: что, если я хочу получить «значение», где «ключ»: «Соответствует сыгранным», в данном случае «20105»

1 Ответ

0 голосов
/ 21 января 2020

Работает что-то похожее ниже (замените serializedJsonString на переменную json):

Опция № 1:

Dim jsonObject As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(serializedJsonString)
    Dim jsonArray As JArray = jsonObject("lifeTimeStats")                   

    If jsonArray IsNot Nothing Then

        For Each o As JObject In jsonArray.Children(Of JObject)()
            If o("key").ToString() <> key Then Continue For
            Console.WriteLine(o("value").ToString())
            Exit For
        Next
    End If

Опция № 2: Использование Выберите, как указано здесь .

Dim jsonObject As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(serializedJsonString)
Dim jsonArray As JArray = jsonObject("lifeTimeStats")                   

If jsonArray IsNot Nothing Then

    For Each item As JObject In jsonArray
        If item.SelectToken("key").ToString <> key Then Continue For
        Console.WriteLine(item.SelectToken("value").ToString)
        Exit For            
     Next
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...