Help us understand the problem. What is going on with this article?

[swift]配列の中に辞書を組み込む

More than 3 years have passed since last update.

Jsonファイルをパースして、その内容をリストに表示させたいので、配列の中に辞書を入れ込んでみました。
まずはJSONの読み込み部分。
普通にJSONを読み込もうとすると、けっこう大変そうなので、SwiftyJsonというものを使用します。
次からダウンロードできます。
https://github.com/SwiftyJSON/SwiftyJSON

ダウンロードしたファイルをxcode上のフォルダに右クリックで「Add File to 〜」で読み込みます。
そのJSONの内容を配列と辞書を組み合わせて読み込みます。

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"}
]}
]},
]}

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away