2015-04-22 2 views
-1

Итак, я работаю над школьным проектом, и я пытаюсь найти лучший способ справиться с этим файлом данных, который содержит довольно большое количество объектов JSON. Я знаю основы VB.net, обработку основных событий и т. Д.Как разобрать этот JSON с помощью VB.net?

Я знаю основы проектирования структур и тому подобное, но мне нужно выяснить, как разобрать и создать список объектов из 5 МБ JSON-файл, который содержит такие элементы, как:

{ 
    "Air Elemental":{ 
     "layout":"normal", 
     "name":"Air Elemental", 
     "manaCost":"{3}{U}{U}", 
     "cmc":5, 
     "colors":[ 
      "Blue" 
     ], 
     "type":"Creature — Elemental", 
     "types":[ 
      "Creature" 
     ], 
     "subtypes":[ 
      "Elemental" 
     ], 
     "text":"Flying", 
     "power":"4", 
     "toughness":"4", 
     "imageName":"air elemental" 
    }, 
    "Ancestral Recall":{ 
     "layout":"normal", 
     "name":"Ancestral Recall", 
     "manaCost":"{U}", 
     "cmc":1, 
     "colors":[ 
      "Blue" 
     ], 
     "type":"Instant", 
     "types":[ 
      "Instant" 
     ], 
     "text":"Target player draws three cards.", 
     "imageName":"ancestral recall" 
    }, 
    "Animate Artifact":{ 
     "layout":"normal", 
     "name":"Animate Artifact", 
     "manaCost":"{3}{U}", 
     "cmc":4, 
     "colors":[ 
      "Blue" 
     ], 
     "type":"Enchantment — Aura", 
     "types":[ 
      "Enchantment" 
     ], 
     "subtypes":[ 
      "Aura" 
     ], 
     "text":"Enchant artifact\nAs long as enchanted artifact isn't a creature, it's an artifact creature with power and toughness each equal to its converted mana cost.", 
     "imageName":"animate artifact" 
    } 
} 

Если кто может оказать помощь, или просто как бы мне точку в правильном направлении, я действительно ценю это. Я думаю, что часть, которая меня отталкивает больше всего, состоит в том, что каждое имя карты является ключом сам по себе, и все данные карты - это значение, связанное с именем «ключ» ...

ответ

1

В данном случае это не имеет особого значения, сколько есть, потому что все они структурированы таким же образом:

Public Class Spell 
    Public Property layout As String 
    Public Property name As String 
    Public Property manaCost As String 
    Public Property cmc As Integer 
    Public Property colors As String() 
    Public Property type As String 
    Public Property types As String() 
    Public Property subtypes As String() 
    Public Property text As String 
    Public Property power As String 
    Public Property toughness As String 
    Public Property imageName As String 
End Class 

Я понятия не имею, что представляет данные, это выглядит как-то игра фантазии. При десериализации (я использовал Newtonsoft), вы будете в конечном итоге с Словаре заклинаниями с ключом является «Air Elemental» и «Animate Артефакт» и т.д. Это займет, но одна строка кода:

Dim jstr As String = from whereever 
Dim mySpells = JsonConvert.DeserializeObject(Of Dictionary(Of String, Spell))(jstr) 

Использование NET JavaScriptSerializer примерно такая же:

Dim jss As New JavaScriptSerializer 
Dim myspells = jss.DeserializeObject(jstr) 

Вы можете использовать http://jsonutils.com/ или даже Специальная вставка в VS, чтобы помочь разобрать, что структуры (классы, на самом деле) должны выглядеть. Тем не менее, он платит, чтобы использовать ваш мозг и смотреть на них. Робот создаст 3 класса для этого JSON и другого контейнера класса для их хранения. Если бы их было 100, это было бы бесполезно долго.

Поскольку каждый элемент идентичен, и один класс JSON может использоваться для каждого. Поскольку JSON отформатирован для размещения, стандартный NET-словарь отлично работает.

+0

Круто, давая ему шанс. – MisutoWolf

+0

Итак, я попытался сказать, длина словаря карт, который был сгенерирован при чтении этого файла, я попытался разобрать, и он, похоже, не работает. Код находится здесь: http://pastebin.com/5EWVKTVL – MisutoWolf

+0

вы не можете десериализовать линию за раз. избавиться от streamreader и просто использовать 'jstr = File.ReadAllText (файл данных)' – Plutonix

1

Есть замечательная особенность в VS 2013 под названием «Вставить как JSON» в меню «Правка», скопируйте строку JSON и выберите эту функцию.

Помните, что есть небольшая ошибка, о которой я сообщал MS, так, что она объявляет массивы. Текст дает вам будет

Public Property x() as DataType 

однако оно должно быть изменено на

Public Property x as DataType() 

для того, чтобы быть правильно объявлен как массив.

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