2016-09-07 101 views
0

我正在使用Alamofire獲取一些JSON數據,而不是將所有內容硬編碼,我想知道如何簡單地將所有內容包含在數組中。獲取JSON中的所有項目並將它們放入數組中

目前,這是JSON文件:

{"One":"Item1","Two":"Item2","Three":"Item3","Four":"Item4","Five":"Item5"} 

我的SWIFT代碼:

var pickerData: [String] = [String]() //Array of content. 
override func viewDidLoad() { 
super.viewDidLoad() 

Alamofire.request(.GET, "https://example.com/file.json").responseJSON{ (response) -> Void in 

if let JSON = response.result.value{ 
let One = JSON["One"] as! String 
let Two = JSON["Two"] as! String 
let Three = JSON["Three"] as! String 
let Four = JSON["Four"] as! String 
let Five = JSON["Five"] as! String 
self.mypickerview.delegate = self 
self.mypickerview.dataSource = self 
self.pickerData = [One, Two, Three, Four, Five] 
... 

我能不使他們硬編碼,這樣我可以有我的文件,這樣,它會仍然工作和包括在JSON的一切,即使我在未來增加更多:

{"Item1","Item2","Item3","Item4","Item5","Item6"} 
+0

這與你的快速編程沒有任何關係。你需要改變你的JSON輸出結構。將它放在一個帶有固定標題的循環中。 – jo3birdtalk

+0

對於不確定大小的有序集合,您的JSON應該使用數組來構造,例如:{「items」:[「Item1」,「Item2」,「Item3」,「Item4」,「Item5」] }' –

回答

1

亞倫是對的,你JSON應該使用數組來保存項目值。

但如果你堅持這種格式,你可以在你pickerData這樣得到的數值:

if let JSON = response.result.value as? [String:AnyObject] { 
    let result = JSON.values.flatMap({ String($0) }) 
    self.pickerData.appendContentsOf(result) 
    self.pickerData.sortInPlace() 
} 

pickerData現在是:

[ 「項目1」, 「項目2」 ,「Item3」,「Item4」,「Item5」]

即使稍後添加新的項目,項目也會在拾取器陣列中排序。

+0

我非常感謝這個答案,但它似乎有一些問題[鏈接](http://i.imgur.com/BjQwNGm.png)結果常量說:「從'[AnyObject]投射到不相關的類型'String'總是失敗 – Matt

+0

@Matt我已經改變了我的答案,檢查了新的代碼,現在應該沒問題 – Moritz

+0

@Matt以前它沒有工作,因爲我忘記將響應作爲Swift字典在if let'。//注意,我已經使用了'flatMap({String($ 0)})',但'flatMap({$ 0 as?String})'現在也可以工作,這要歸功於這個轉換。 – Moritz

相關問題