Jsonファイルをパースして、その内容をリストに表示させたいので、配列の中に辞書を入れ込んでみました。
まずはJSONの読み込み部分。
普通にJSONを読み込もうとすると、けっこう大変そうなので、SwiftyJsonというものを使用します。
次からダウンロードできます。
https://github.com/SwiftyJSON/SwiftyJSON
ダウンロードしたファイルをxcode上のフォルダに右クリックで「Add File to 〜」で読み込みます。
そのJSONの内容を配列と辞書を組み合わせて読み込みます。
let path = NSBundle.mainBundle().pathForResource("titleList", ofType: "json")
let jsondata = NSData(contentsOfFile: path!)
var json = JSON(data:jsondata!)
JSONの中身を追加していきます。
まず、「あ行」などの行を配列に格納して、それぞれの作者の情報を辞書で各行に入れ込みます。
下記のページで配列に辞書を組み込む方法が記述されています。
http://hamasyou.com/blog/2014/09/12/swift-mysterious-multi-dimensional-array/
この方法だと、最初に配列と辞書の初期化を行います。
typealias furigana = Dictionary<String, AnyObject>
var myItems:[[furigana]]=[[]]
「furigana」という辞書の値を初期化。StringとAnyObjectでなんでも入るようにします。
そのあと、多次元配列にfuriganaを入れ込みます。
for var y=0; y<json["list"].count; y++ {
self.mySections.append(json["list"][y]["listName"].string!)
self.myItems.append([])
for var i=0; i<json["list"][y]["listInfo"].count; i++ {
self.myItems[y].append([
"name":json["list"][y]["listInfo"][i]["aouther"].string!,
"kana":json["list"][y]["listInfo"][i]["kana"].string!
])
self.myItems[y][i]["title"] = json["list"][y]["listInfo"][i]["title"].count
}
}
先ほどのページはなかったのですが、最初の初期化部分では、辞書の要素を追加することができませんでした。
つまり、2つ目の配列を追加することができなかったので、「self.myItems.append([])」を加えることで、新しい配列を追加することができるようになりました。
さらに、別の型を追加する場合、"name"や"kana"と同じようにintを追加しようと思ったのですが、
うまくいかなったので、別の行にして追加しました。
最後に、読み込んだJSONの内容です。
JSON: titleList. json
{"list":[
{"listName" : "あ行", "listInfo":[
{"aouther":"作者名あああああ", "kana":"aaaaa", "title":[
{"titleName":"作品名あ001", "url":"URL11111"},
{"titleName":"作品名あ002", "url":"URL22222"},
{"titleName":"作品名あ003", "url":"URL33333"}
]},
{"aouther":"作者名いいいいい", "kana":"iiiiii", "title":[
{"titleName":"作品名い001", "url":"URL11111"},
{"titleName":"作品名い002", "url":"URL22222"},
{"titleName":"作品名い003", "url":"URL33333"},
{"titleName":"作品名い004", "url":"URL44444"},
{"titleName":"作品名い005", "url":"URL55555"}
]},
{"aouther":"作者名ううううう", "kana":"uuuuuu", "title":[
{"titleName":"作品名い001", "url":"URL11111"}
]}
]},
{"listName" : "か行", "listInfo":[
{"aouther":"作者名かかかかか", "kana":"aaaaa", "title":[
{"titleName":"作品名か001", "url":"URL11111"},
{"titleName":"作品名か002", "url":"URL22222"},
{"titleName":"作品名か003", "url":"URL33333"}
]},
{"aouther":"作者名きききききき", "kana":"aaaaa", "title":[
{"titleName":"作品名き001", "url":"URL11111"},
{"titleName":"作品名き002", "url":"URL22222"},
{"titleName":"作品名き003", "url":"URL33333"},
{"titleName":"作品名き004", "url":"URL44444"},
{"titleName":"作品名き005", "url":"URL55555"}
]},
{"aouther":"作者名くくくくくく", "kana":"aaaaa", "title":[
{"titleName":"作品名く001", "url":"URL11111"}
]}
]},
]}