2011-12-01 4 views
1

Может кто-нибудь помочь мне прочитать следующую строку json в объекты.read json string

[ { "category": "burglary", "month": "2011-08", "location": { "latitude": "52.6361452", "street": { "id": 62819, "name": "On or near Burton Street" }, "longitude": "-1.1243242" }, "context": "", "id": 4051044 },... 

Я создал класс, содержащий объекты каждого типа под названием «преступления», а затем что-то вроде следующего:

Dim listArray As New List(Of crimes)() 
Using jsonStream = New System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(strString)) 
    Dim serializer As New DataContractJsonSerializer(GetType(List(Of crimes))) 
    Dim array As List(Of crimes) = TryCast(serializer.ReadObject(jsonStream), List(Of crimes)) 
    listArray = array 
End Using 

, но это дает мне исключение безопасности.

Любая полезная помощь или подталкивание в правильном направлении были бы полезны.

ответ

1

мое предложение заключается в использовании Json.NET, вы можете написать код, чтобы вручную делать синтаксический анализ, но это то, что библиотеки для :) Json.NET

0

В принципе, JSON читается одинаково, независимо от языка вычислений вы использование. Разница в объектах, которые она создает.

Там в основном будет пять:

  1. Массив
  2. словарь (что JSON называет "объект")
  3. Строка
  4. Номер (с вариациями - поплавок, INT, и т.д.)
  5. Что-то представлять "NULL"

Ваша строка начинается с a [, который представляет массив. В Objective-C это возвращалось как NSArray, в Java, возможно, ArrayList. Не уверен, что типично для C#.

Таким образом, внутри массива находятся элементы, разделенные запятыми (,). В общем случае это может быть любой из указанных выше типов. Следующий символ: {, представляющий словарь/объект. Это набор пар имя/значение. В Objective-C это будет NSDictionary, на Java, возможно, HashMap. Затем вы видите пары имя/значение, две части каждой пары, разделенные :, и пары, отделенные друг от друга ,. Первая часть - это имя, всегда в кавычках и всегда строка символов. Вторая часть - это значение, которое может быть любым из вышеперечисленных 5 типов. (Имейте в виду, что элементы массива упорядочены, но пары «имя/значение» в «объекте» могут быть в любом порядке - порядок не сохраняется, когда JSON преобразуется из одной формы в другую.)

В вашем в случае первой пары имя/значение "category": "burglary". Это означает, что элемент с названием «категория» имеет значение «кража со взломом».

Чуть дальше вы видите "location": { "latitude": "52.6361452" .... Это означает, что пара имя/значение имеет имя «местоположение» и значение, которое является другим словарем/объектом. Поэтому, когда вы выберете значение «location» из вывода вашего синтаксического анализатора, вы вернете представление своего словаря/объекта на вашем языке.

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

Но некоторые инструментальные средства JSON предоставляют механизм, основанный на траектории, для извлечения элементов, которые вы хотите. Например, попросите «0.location.latitude» или некоторые из них и получите «52.6361452».

+0

Спасибо, ребята.Я все еще не уверен, что делать дальше ... Мой код не соответствует значению? – izeko