2013-04-18 34 views
3

我正在使用AFNetworking從Web服務檢索JSON數據。我得到的部分響應字符串是:如何保留使用AFNetworking檢索的JSON數據的順序?

{"DATA":{"LEASE TYPE":"3 Yrs + 0 renew of 0 Yrs","LANDLORD":"","TENANT":"test comp"... 

等等。 「數據」字典中的鍵值順序(「租用類型」,「租借」,「租戶」...)對於演示目的很重要。然而,當AFNetworking電話NSJSONSerialization's

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error; 

方法,返回的詞典有不同的順序按鍵。

我注意到AFJSONRequestOperation對象的服務器響應存儲爲NSString,並且所有內容都按正確的順序排列。不過,如果我可以避免的話,我並不熱衷於手動解析JSON。

任何人都可以提出一種方法,讓我得到/保持在他們的原始順序的關鍵?

謝謝。

回答

3

如果順序很重要,請使用數組而不是字典,字典的性質無序。或者按照需要的順序添加一個字典鍵數組。

如果您無法控制發送的響應,那麼您至少必須自己解析JSON以進行排序。

+0

獲得該值我認爲你是對的 - 我基本上不能控制將文本轉換爲字典的過程,因此解析第二次JSON是我唯一的選擇。謝謝。 –

0

當你創建一個NSDictionary時,順序將不一樣。我經常意識到字典按鍵名按字母順序排序。

但是,當使用字典時,順序並不重要。而他們不應該!

+0

我當然明白,這是方法原則上應該是這樣。但在這種情況下,原始訂單很重要。我的問題不是關於什麼是正確的行爲,而是關於從服務器返回(重新)捕獲數據原始順序的最佳方式。 –

+0

據我所知,詞典不能訂購,他們不會保留他們的訂單。我認爲實現這一點的唯一方法是使用兩個數組。然後你可以使用'[values objectAtIndex:[keys indexOfObject:@「myKey」]]' –