teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

15

add code

2020/11/17 14:34

投稿

secretUsed
secretUsed

スコア2

title CHANGED
@@ -1,1 +1,1 @@
1
- 複雑なJSON形式でAPIから取得したデータを表示する方法
1
+ 複雑なJSON形式でAPI取得したデータを表示する方法
body CHANGED
File without changes

14

add code

2020/11/17 14:34

投稿

secretUsed
secretUsed

スコア2

title CHANGED
@@ -1,1 +1,1 @@
1
- 複雑なJSONからレスポンスを取得する方法
1
+ 複雑なJSON形式でAPIから取得したデータを表示する方法
body CHANGED
File without changes

13

add code

2020/11/17 14:33

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -148,6 +148,7 @@
148
148
 
149
149
  items.removeAll()
150
150
 
151
+ //movieIDは他のVIewControllerか取得したものとなります。
151
152
  URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/(movieID)?api_key=#########&language=ja&append_to_response=credits")!,
152
153
  completionHandler: {data, response, error in
153
154
 

12

add code

2020/11/14 11:48

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -111,7 +111,7 @@
111
111
 
112
112
  items.removeAll()
113
113
 
114
- URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/(movieID)?api_key=#########&language=ja&append_to_response=credits")!,
114
+ URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/popular?api_key=########&language=ja&page=1")!,
115
115
  completionHandler: {data, response, error in
116
116
 
117
117
  guard let data = data else {
@@ -148,7 +148,7 @@
148
148
 
149
149
  items.removeAll()
150
150
 
151
- URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/popular?api_key=########&language=ja&page=1")!,
151
+ URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/(movieID)?api_key=#########&language=ja&append_to_response=credits")!,
152
152
  completionHandler: {data, response, error in
153
153
 
154
154
  guard let data = data else {

11

add code

2020/11/14 11:46

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -111,7 +111,7 @@
111
111
 
112
112
  items.removeAll()
113
113
 
114
- URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/popular?api_key=########&language=ja&page=1")!,
114
+ URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/(movieID)?api_key=#########&language=ja&append_to_response=credits")!,
115
115
  completionHandler: {data, response, error in
116
116
 
117
117
  guard let data = data else {

10

add code

2020/11/14 11:45

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -142,7 +142,7 @@
142
142
  ```
143
143
  ### コード案
144
144
  ```
145
- private var items:[CastItem] = [CastItem]()
145
+ private var items:[CastModel] = [CastModel]()
146
146
 
147
147
  func fechData(){
148
148
 

9

add code

2020/11/14 11:42

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -140,21 +140,6 @@
140
140
  }
141
141
  }
142
142
  ```
143
- var result: Credits?
144
- do {
145
- result = try JSONDecoder().decode(Credits.self, from: data)
146
- }
147
- catch {
148
- print("JSON perse error")
149
- }
150
-
151
- guard let finalResult = result else {
152
- return
153
- }
154
-
155
- let newMovies = finalResult.cast
156
- self.items.append(contentsOf: newMovies)
157
- print(newMovies)
158
143
  ### コード案
159
144
  ```
160
145
  private var items:[CastItem] = [CastItem]()

8

add code

2020/11/14 11:40

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -99,7 +99,7 @@
99
99
  class FirstViewController: UIViewController {
100
100
 
101
101
  @IBOutlet weak var table: UITableView!
102
- private var items:[CastItem] = [CastItem]()
102
+ private var items:[MovieItem] = [MovieItem]()
103
103
 
104
104
  override func viewDidLoad() {
105
105
  super.viewDidLoad()
@@ -157,7 +157,7 @@
157
157
  print(newMovies)
158
158
  ### コード案
159
159
  ```
160
- private var items:[MovieItem] = [MovieItem]()
160
+ private var items:[CastItem] = [CastItem]()
161
161
 
162
162
  func fechData(){
163
163
 

7

add code

2020/11/14 11:38

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -99,7 +99,7 @@
99
99
  class FirstViewController: UIViewController {
100
100
 
101
101
  @IBOutlet weak var table: UITableView!
102
- private var items:[MovieItem] = [MovieItem]()
102
+ private var items:[CastItem] = [CastItem]()
103
103
 
104
104
  override func viewDidLoad() {
105
105
  super.viewDidLoad()

6

add code

2020/11/14 11:36

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -140,4 +140,56 @@
140
140
  }
141
141
  }
142
142
  ```
143
+ var result: Credits?
144
+ do {
145
+ result = try JSONDecoder().decode(Credits.self, from: data)
146
+ }
147
+ catch {
148
+ print("JSON perse error")
149
+ }
150
+
151
+ guard let finalResult = result else {
152
+ return
153
+ }
154
+
155
+ let newMovies = finalResult.cast
156
+ self.items.append(contentsOf: newMovies)
157
+ print(newMovies)
143
- ### コード案
158
+ ### コード案
159
+ ```
160
+ private var items:[MovieItem] = [MovieItem]()
161
+
162
+ func fechData(){
163
+
164
+ items.removeAll()
165
+
166
+ URLSession.shared.dataTask(with: URL(string: "https://api.themoviedb.org/3/movie/popular?api_key=########&language=ja&page=1")!,
167
+ completionHandler: {data, response, error in
168
+
169
+ guard let data = data else {
170
+ print(error?.localizedDescription ?? "Unknown error")
171
+ return
172
+ }
173
+
174
+ var result: Credits?
175
+ do {
176
+ result = try JSONDecoder().decode(Credits.self, from: data)
177
+ }
178
+ catch {
179
+ print("JSON perse error")
180
+ }
181
+
182
+ guard let finalResult = result else {
183
+ return
184
+ }
185
+
186
+ let newMovies = finalResult.cast
187
+ self.items.append(contentsOf: newMovies)
188
+ print(newMovies)
189
+
190
+ DispatchQueue.main.async {
191
+ self.table.reloadData()
192
+ }
193
+ }).resume()
194
+ }
195
+ ```

5

add code

2020/11/14 04:59

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -139,4 +139,5 @@
139
139
  }).resume()
140
140
  }
141
141
  }
142
- ```
142
+ ```
143
+ ### コード案

4

add code

2020/11/14 04:50

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -119,22 +119,20 @@
119
119
  return
120
120
  }
121
121
 
122
- var result: Credits?
122
+ var result: MovieStruct?
123
123
  do {
124
- result = try JSONDecoder().decode(Credits.self, from: data)
124
+ result = try JSONDecoder().decode(MovieStruct.self, from: data)
125
125
  }
126
- catch {
126
+ catch{
127
127
  print("JSON perse error")
128
128
  }
129
129
 
130
130
  guard let finalResult = result else {
131
131
  return
132
132
  }
133
-
133
+
134
- let newMovies = finalResult.cast
134
+ let newMovies = finalResult.results
135
- self.items.append(newMovies)
135
+ self.items.append(contentsOf: newMovies)
136
- print(newMovies)
137
-
138
136
  DispatchQueue.main.async {
139
137
  self.table.reloadData()
140
138
  }

3

add code

2020/11/14 04:49

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -119,9 +119,9 @@
119
119
  return
120
120
  }
121
121
 
122
- var result: MovieStruct?
122
+ var result: Credits?
123
123
  do {
124
- result = try JSONDecoder().decode(MovieStruct.self, from: data)
124
+ result = try JSONDecoder().decode(Credits.self, from: data)
125
125
  }
126
126
  catch {
127
127
  print("JSON perse error")
@@ -131,8 +131,8 @@
131
131
  return
132
132
  }
133
133
 
134
- let newMovies = finalResult.results
134
+ let newMovies = finalResult.cast
135
- self.items.append(contentsOf: newMovies)
135
+ self.items.append(newMovies)
136
136
  print(newMovies)
137
137
 
138
138
  DispatchQueue.main.async {

2

add code

2020/11/14 04:47

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -34,7 +34,7 @@
34
34
  import Foundation
35
35
 
36
36
  // MARK: - Welcome
37
- struct Welcome: Codable {
37
+ struct CastModel: Codable {
38
38
  let id: Int
39
39
  let credits: Credits
40
40
  }

1

change code

2020/11/14 03:56

投稿

secretUsed
secretUsed

スコア2

title CHANGED
File without changes
body CHANGED
@@ -12,20 +12,18 @@
12
12
  "credits": {
13
13
  "cast": [
14
14
  {
15
- "gender": 2,
16
15
  "id": 6193,
17
- "name": "Leonardo DiCaprio",
16
+ "name": "Leonardo DiCaprio"
18
- "order": 0,
17
+ }
19
- },
18
+ ],
20
- ]
21
19
  "crew": [
20
+
22
21
  {
23
22
  "department": "Directing",
24
- "gender": 2,
25
23
  "id": 2710,
26
24
  "job": "Director",
27
- "name": "James Cameron",
25
+ "name": "James Cameron"
28
- },
26
+ }
29
27
  ]
30
28
  }
31
29
  }
@@ -35,45 +33,31 @@
35
33
  ```
36
34
  import Foundation
37
35
 
36
+ // MARK: - Welcome
38
- struct CastItem : Codable {
37
+ struct Welcome: Codable {
39
- let id:Int
38
+ let id: Int
39
+ let credits: Credits
40
40
  }
41
41
 
42
+ // MARK: - Credits
42
43
  struct Credits: Codable {
43
44
  let cast: [Cast]
44
45
  let crew: [Crew]
45
46
  }
46
47
 
48
+ // MARK: - Cast
47
49
  struct Cast: Codable {
48
-
49
- let gender, id: Int
50
+ let id: Int
50
51
  let name: String
51
- let order: Int
52
-
53
- enum CodingKeys: String, CodingKey {
54
- case gender, id, name, order
55
- }
56
52
  }
57
53
 
54
+ // MARK: - Crew
58
55
  struct Crew: Codable {
59
-
60
- let department: Department
56
+ let department: String
61
- let gender, id: Int
57
+ let id: Int
62
58
  let job, name: String
63
-
64
- enum CodingKeys: String, CodingKey {
65
-
66
- case department, gender, id, job, name
67
- }
68
59
  }
69
60
 
70
- enum Department: String, Codable {
71
-
72
- case crew = "Crew"
73
- case directing = "Directing"
74
- case production = "Production"
75
-
76
- }
77
61
  ```
78
62
 
79
63
  ### JSON2 & Model2