1. ferretdayo

    Posted

    ferretdayo
Changes in title
+SwiftyJSONでちょっと階層深くしたときのやり方
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,73 @@
+# 概要
+与えられるJSONはこんな感じで,`hobbies`の部分のデータ取得方法がわからなかった.
+そこについて説明する.
+
+```
+{
+ "users":[
+ {
+ "name": "太郎",
+ "age": 23,
+ "hobbies": [
+ {
+ "id": 1,
+ "name": "野球"
+ },
+ {
+ "id": 5,
+ "name": "ダーツ"
+ },
+ {
+ "id": 20,
+ "name": "缶蹴り"
+ }
+ ]
+ },
+ .
+ .
+ .
+ ]
+}
+```
+
+# 実際のコード
+
+```swift
+Alamofire.request(requestUrl).responseJSON{ response in
+ switch response.result {
+ case .success(let value):
+ let json = JSON(value)
+ json["users"].forEach{(_, data) in
+ let name = data["name"].string!
+ let age = data["age"].int!
+
+ let hobbyList = data["hobbies"].array
+ hobbyList?.forEach{(data) in
+ let hobbyId = data["id"].int!
+ let hobbyName = data["name"].string!
+ }
+ }
+ case .failure(let error):
+ print("エラーだよー")
+ }
+}
+```
+こんな感じで取得することが出来ます.
+
+`let hobbyList = data["hobbies"].array`
+ここが対象のところで,`.array`とすることで,jsonの"hobbies"のデータを取得しています.
+
+`.arrayObject`もあるのですが,"hobbies"の中身をオブジェクトに変換してしまい?`:`のところが`=`になり,上手く出来ませんでした.
+
+```text:.arrayの場合
+{
+ "id": 1,
+ "name": "野球"
+}
+```
+```text:.arrayObjectの場合
+{
+ "id" = 1,
+ "name" = "野球"
+}
+```