2015-07-05 2 views
1

Im в настоящее время пытается разобрать эту строку в мою программу с API от http://www.newtonsoft.com/json/help/html/Introduction.htmКак разобрать динамический JSon строку с помощью JSon Апи

{ 
"193461232": [ 
    { 
     "name": "Master Yi's Pyromancers", 
     "tier": "GOLD", 
     "queue": "RANKED_SOLO_5x5", 
     "entries": [ 
      { 
       "playerOrTeamId": "193461232", 
       "playerOrTeamName": "wamborambo", 
       "division": "V", 
       "leaguePoints": 58, 
       "wins": 109, 
       "losses": 104, 
       "isHotStreak": false, 
       "isVeteran": false, 
       "isFreshBlood": false, 
       "isInactive": false 
      } 
     ] 
    }, 
    { 
     "name": "Elise's Masterminds", 
     "tier": "BRONZE", 
     "queue": "RANKED_TEAM_3x3", 
     "entries": [ 
      { 
       "playerOrTeamId": "TEAM-4f44680-9f2b-11e4-8954-c81f66db8bc5", 
       "playerOrTeamName": "KidsClub", 
       "division": "IV", 
       "leaguePoints": 63, 
       "wins": 6, 
       "losses": 8, 
       "isHotStreak": false, 
       "isVeteran": false, 
       "isFreshBlood": false, 
       "isInactive": false 
      } 
     ] 
    }, 
    { 
     "name": "Elise's Horde", 
     "tier": "BRONZE", 
     "queue": "RANKED_TEAM_5x5", 
     "entries": [ 
      { 
       "playerOrTeamId": "TEAM-4f457640-9f2b-11e4-8954-c81f66db8bc5", 
       "playerOrTeamName": "KidsClub", 
       "division": "I", 
       "leaguePoints": 28, 
       "wins": 6, 
       "losses": 4, 
       "isHotStreak": false, 
       "isVeteran": false, 
       "isFreshBlood": false, 
       "isInactive": false 
      } 
     ] 
    } 
] 

}

Они Проблемы является строка является динамической. Мне нужно получить «193461232», прежде чем я смогу использовать String. У меня также проблема, потому что имя, очередь, записи являются массивами И я практиковал с помощью Simple Jsons, но это очень сложно для меня.

Извините, мой английский не очень хорош, но я надеюсь, что вы все еще можете понять мою проблему.

ответ

1

«193461232», вероятно, что-то связано с запросом, другими словами, я не считаю его случайным. Это может быть даже ваш playerId - значение также отображается как playerOrTeamId для первой группы (и связанный с ним playerOrTeamName похож на ваш здесь). Тем не менее, я не знаю, как этот идентификатор относится к двум возвращенным двум предметам. Даже если вы этого не знаете, вы можете это получить.

После того, как вы делаете, если вам не нужно только одну или две вещи из JSON, вам потребуются некоторые классы для десериализации в:

Public Class EntryItem 
    Public Property playerOrTeamId As String 
    Public Property playerOrTeamName As String 
    Public Property division As String 
    Public Property leaguePoints As Integer 
    Public Property wins As Integer 
    Public Property losses As Integer 
    Public Property isHotStreak As Boolean 
    Public Property isVeteran As Boolean 
    Public Property isFreshBlood As Boolean 
    Public Property isInactive As Boolean 
End Class 

Public Class Entry 
    Public Property name As String 
    Public Property tier As String 
    Public Property queue As String 
    Public Property entries As List(Of EntryItem) 
End Class 

С тех, его довольно просто:

Dim jstr = from whereever 

Dim jobj = JObject.Parse(jstr) 

Dim jName = jobj.Properties(0).Name ' name, ie 193461232 
Dim jItems = jobj(jName)    ' related items 

Dim items= JsonConvert.DeserializeObject(Of Entry())(jItems.ToString) 

For n As Int32 = 0 To items.Length - 1 
    Console.WriteLine(items(n).name) 
Next 

выход названия команды:

Мастер Йи Pyromancers
Элизы Mas terminds
Элизы Орда

Если это ваш идентификатор, вы можете просто использовать jobj("193461232") десериализации. Конечно, это может работать только на вас. Инструмент для других игроков должен использовать jobj.Properties(0).Name, если они не знают их ИД.


Чтобы получить доступ к данным ввода, просто просверлить в нем:

myWins = items(0).entries(0).wins 
+0

Я уже решил эту проблему, но им в настоящее время работает над этой проблемой массива. Я не знаю, как я могу получить элементы playerOrTeamId или выигрывает, например. , но спасибо, что помогли мне. Это помогло мне много для понимания json more ^^ – wambo

+0

Это все решено в ответе. 'items (0) .entries (0) .wins' будет для Master Po. Как показано, на каждый элемент будет только одна запись, но она сериализована как массив (на всякий случай, я думаю). – Plutonix

+0

Спасибо за помощь .. Я сделал почти то же самое, но я сделал синтаксическую ошибку. Это очень помогло мне – wambo

Смежные вопросы