2011-12-01 143 views
1

任何人都可以幫我讀下面的json字符串到對象中。閱讀json字符串

[ { "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 

,但是這給了我一個安全異常。

任何幫助apreciated或在正確的方向微調將是有益的。

回答

1

我的建議是使用Json.Net,您可以編寫代碼手工做解析,但是這就是庫是:) Json.NET

0

基本上,JSON讀取不管計算語言的你一樣正在使用。區別在於它創建的對象。

將有基本五:

  1. 陣列
  2. 詞典(JSON什麼叫 「對象」)
  3. 字符串
  4. 號(與變化 - 浮動,INT等)
  5. 表示「NULL」的東西

字符串以字母開頭一個[,它代表一個數組。在Objective-C中,這將作爲NSArray返回,在Java中可能是ArrayList。不確定C#的典型特徵。

所以在數組裏面是元素,用逗號分隔(,)。在一般情況下,這些可以是以上5種類型中的任何一種。下一個符號是{,代表字典/對象。這是名稱/值對的集合。在Objective-C中,它將是一個NSDictionary,在Java中也許是一個HashMap。然後您會看到名稱/值對,由:分隔的每個對的兩個部分以及由,彼此分開的對。第一部分是名稱,總是用引號括起來,總是一個字符串。第二部分是價值,可以是以上五種類型中的任何一種。 (請記住,數組元素是有序的,但「對象」中的名稱/值對可以按任意順序排列 - 當JSON從一種形式轉換爲另一種形式時,不會保留順序)。

在您的如果名字/值對是"category": "burglary"。這意味着名爲「類別」的項目具有「盜竊」的值。

你稍遠一點看到"location": { "latitude": "52.6361452" ...。這意味着名稱/值對的名稱爲「位置」,而值是另一個字典/對象。所以當你從你的解析器的輸出中獲取值「location」時,你會得到你的語言對字典/對象的表示。

注意,這意味着,對於一般情況下,你需要檢查對象的你回來,你「剝洋蔥層」得到你想要的數據項的類型。

但是一些JSON工具包提供了一個基於路徑的機制來獲取您想要的項目。例如,要求「0.location.latitude」或其他某些類型,並得到「52.6361452」作爲結果。

+0

謝謝你們。我仍然不確定下一步該做什麼......我的代碼方式離開了商標嗎? – izeko