2016-09-07 8 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

Aaronが正しいですr 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私は私の答えを変更しました、新しいコードをチェックしてください、それは今okです。 – Moritz

+0

@Matt以前はそれが動作しませんでした。 let ')//私はflatMap({String($ 0)})'を使用していますが、flatMap({$ 0 as?String}) 'もこのキャスティングのおかげで機能することに注意してください。 – Moritz

関連する問題