質問編集履歴

11

修正

2019/03/06 02:33

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -6,15 +6,25 @@
6
6
 
7
7
 
8
8
 
9
- 以下のJSONデータをstrctに格納したいのですが、中身がnilとなってまいます
9
+ 以下のJSONデータをstrctに格納したいのですが、ネストされたデータを構造体に取得できませんで
10
+
11
+
12
+
10
-
13
+ 頂いた回答と参考書を参考にコードを修正した所、nemeのJSONデータは取得できましたが、locationデータを取得できませんでした。
11
-
12
-
14
+
15
+
16
+
13
- JSONデータのvenuesが配列になっている所が原因と予想しています、調べてもわかりませんでした
17
+ locationの中のデータを格納する際エラーとなってしまう原因がわかりません。
18
+
19
+
20
+
21
+
22
+
14
-
23
+ 参考書(たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 10 Swift 4.2対応 より)
15
-
16
-
24
+
25
+
26
+
17
- 、nameが2箇所あるので東京駅方のname取出す方法も教えていただきたいです。
27
+ 参考書では全体を表す構造は作成していなかったので、今回はそ形式参考にしていす。
18
28
 
19
29
 
20
30
 
@@ -32,11 +42,13 @@
32
42
 
33
43
  {
34
44
 
45
+ {
46
+
35
47
  "meta": {
36
48
 
37
49
  "code": 200,
38
50
 
39
- "requestId": "5c7d37781ed2196e4631bc6f"
51
+ "requestId": "5c7f2a5b1ed2196e46ea83ef"
40
52
 
41
53
  },
42
54
 
@@ -46,15 +58,43 @@
46
58
 
47
59
  {
48
60
 
49
- "id": "4b0587a6f964a5203e9e22e3",
61
+ "id": "4b792714f964a52018ed2ee3",
50
-
62
+
51
- "name": "東京駅",
63
+ "name": "東海道新幹線 東京駅",
64
+
52
-
65
+ "contact": {},
66
+
67
+ "location": {
68
+
69
+ "address": "丸の内1-9-1",
70
+
71
+ "lat": 35.681154862661515,
72
+
73
+ "lng": 139.7679060569781,
74
+
75
+ "distance": 71,
76
+
77
+ "postalCode": "100-0005",
78
+
79
+ "cc": "JP",
80
+
53
- "city": "千代田区",
81
+ "city": "千代田区",
54
-
82
+
55
- "state": "東京都",
83
+ "state": "東京都",
56
-
84
+
57
- "country": "日本",
85
+ "country": "日本",
86
+
87
+ "formattedAddress": [
88
+
89
+ "丸の内1-9-1",
90
+
91
+ "千代田区, 東京都",
92
+
93
+ "100-0005",
94
+
95
+ "日本"
96
+
97
+ ]
58
98
 
59
99
  },
60
100
 
@@ -68,55 +108,599 @@
68
108
 
69
109
  "pluralName": "鉄道駅",
70
110
 
71
- "shortName": "鉄道駅",
111
+ "shortName": "鉄道駅",
112
+
113
+ "icon": {
114
+
115
+ "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/trainstation_",
116
+
117
+ "suffix": ".png"
118
+
119
+ },
120
+
121
+ "primary": true
122
+
123
+ }
72
124
 
73
125
  ],
74
126
 
127
+ "verified": false,
128
+
129
+ "stats": {
130
+
131
+ "tipCount": 0,
132
+
133
+ "usersCount": 0,
134
+
135
+ "checkinsCount": 0,
136
+
137
+ "visitsCount": 0
138
+
139
+ },
140
+
141
+
142
+
143
+ }
144
+
145
+ ],
146
+
147
+ "confident": false
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ```
154
+
155
+
156
+
157
+
158
+
159
+ ```swift
160
+
161
+ [現在のコード]
162
+
163
+
164
+
165
+ import UIKit
166
+
167
+ import FoursquareAPIClient
168
+
169
+ import Social
170
+
171
+
172
+
173
+ class SettingViewController: UIViewController, UISearchBarDelegate { //, UITableViewDataSource,UITableViewDelegate {
174
+
175
+
176
+
177
+ override func viewDidLoad() {
178
+
179
+ super.viewDidLoad()
180
+
181
+
182
+
183
+ // Do any additional setup after loading the view.
184
+
185
+
186
+
187
+ searchVenue.delegate = self
188
+
189
+
190
+
191
+ searchVenue.placeholder = "検索スポットの入力"
192
+
193
+
194
+
195
+ // tableView.dataSource = self
196
+
197
+
198
+
199
+ // tableView.delegate = self
200
+
201
+ }
202
+
203
+
204
+
205
+
206
+
207
+ @IBOutlet weak var searchVenue: UISearchBar!
208
+
209
+ @IBOutlet weak var tableView: UITableView!
210
+
211
+
212
+
213
+ //venueListをタプル配列で宣言 必要な部分のみを格納して配列に追加するためにここで宣言
214
+
215
+ var venueList : [(name:String, contact:String, city:String, state : String, country:String)] = []
216
+
217
+
218
+
219
+ func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
220
+
221
+ view.endEditing(true)
222
+
223
+
224
+
225
+ if let searchWord = searchBar.text {
226
+
227
+ print(searchWord)
228
+
229
+ }
230
+
231
+ }
232
+
233
+
234
+
235
+ //取得したレスポンスデータ(JSON)を記録する構造体を宣言
236
+
237
+
238
+
239
+ //ItemJson構造体に以下のレスポンスデータを格納
240
+
241
+ struct ItemJson : Codable { //Codable : JSONを変換にした時に、一括して変数にデータを格納するプロトコル
242
+
243
+ let response : JsonResponse
244
+
245
+ }
246
+
247
+
248
+
249
+ struct JsonResponse : Codable {
250
+
251
+ let venues : [JsonVenues]
252
+
253
+ }
254
+
75
255
 
76
256
 
257
+ struct JsonVenues : Codable {
258
+
259
+ let name : String?
260
+
261
+ }
262
+
263
+ //↑ここまでは狙い通りの結果
264
+
265
+
266
+
267
+
268
+
269
+ /* ↓ここをコメントアウトすると格納時エラーになります
270
+
271
+
272
+
273
+ //===================================================
274
+
275
+
276
+
277
+
278
+
279
+ let location : [Jsonlocation]
280
+
281
+
282
+
283
+ }
284
+
285
+
286
+
287
+ struct Jsonlocation : Codable {
288
+
289
+ let city : String?
290
+
291
+ let state : String?
292
+
293
+ let country : String?
294
+
295
+ }
296
+
297
+ //===================================================
298
+
299
+
300
+
301
+
302
+
303
+ */
304
+
305
+
306
+
307
+
308
+
309
+ struct ResultJson : Codable {
310
+
311
+ let item : [ItemJson]?
312
+
313
+ }
314
+
315
+
316
+
317
+
318
+
319
+ //現在位置ボタンタップ時リクエストURL作成
320
+
321
+ @IBAction func searchNearVenue(_ sender: Any) {
322
+
323
+
324
+
325
+
326
+
327
+ //認証KeyであるIDとSecretの宣言
328
+
329
+ let clientId = "*****"
330
+
331
+ let clientSecret = "*****"
332
+
333
+
334
+
335
+ // 現在位置を東京駅に指定
336
+
337
+ // to do GPSから現在位置を取得する
338
+
339
+ let currentLocation_latitude = 35.681236
340
+
341
+ let currentLocation_longitude = 139.767125
342
+
343
+
344
+
345
+ //緯度経度からvenue検索するreq_URL作成。検索数、範囲を指定。
346
+
347
+
348
+
349
+
350
+
351
+ guard let req_url = URL (string : "https://api.foursquare.com/v2/venues/search?v=20180228&ll=(currentLocation_latitude),(currentLocation_longitude)&intent=checkin&limit=1&radius=4000&client_id=(clientId)&client_secret=(clientSecret)")
352
+
353
+ else {
354
+
355
+ return
356
+
357
+ }
358
+
359
+
360
+
361
+ //req_URLのデバック
362
+
363
+ print(req_url)
364
+
365
+
366
+
367
+ //以下で、req_urlにアクセスし構造体にレスポンスデータを格納する処理を行う
368
+
369
+
370
+
371
+ //req_urlをロードするプロトコルを宣言
372
+
373
+ let req = URLRequest(url: req_url)
374
+
375
+
376
+
377
+ let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
378
+
379
+
380
+
381
+ //ダウンロード先URL:req、data格納、通信状態データ格納、エラー内容格納
382
+
383
+ let task = session.dataTask(with: req, completionHandler: {
384
+
385
+ (data, response, error) in
386
+
387
+
388
+
389
+ session.finishTasksAndInvalidate()
390
+
391
+
392
+
393
+ // パースの際にエラーになった場合の例外処理でdo catch
394
+
395
+ do {
396
+
397
+
398
+
399
+ //JSONをデコードするためのオブジェクトを作成
400
+
401
+ let decoder = JSONDecoder()
402
+
403
+
404
+
405
+ //受け取ったJSONデータをパースして格納
406
+
407
+
408
+
409
+ //↓decode(***)が鍵である
410
+
411
+ //ResultJsonだとエラーItemJsonにしたらなぜか上手くいった
412
+
413
+
414
+
415
+
416
+
417
+ let json = try decoder.decode(ItemJson.self, from: data!)
418
+
419
+
420
+
421
+ //デバック用
422
+
423
+ print (json)
424
+
425
+
426
+
427
+
428
+
429
+ } catch {
430
+
431
+
432
+
433
+ print("エラーが発生しました")
434
+
435
+
436
+
437
+ }
438
+
439
+
440
+
441
+ })
442
+
443
+
444
+
445
+ task.resume()
446
+
447
+
448
+
449
+ }
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+ } //end
458
+
459
+
460
+
461
+ ```
462
+
463
+
464
+
465
+ ```JSON
466
+
467
+
468
+
469
+ 参考書が使っているJSONデータ
470
+
471
+
472
+
473
+ {
474
+
475
+ "item": [
476
+
477
+ {
478
+
479
+ "id": "6833",
480
+
481
+ "name": "ベビースターチップス(CoCo壱番屋カツカレー味)",
482
+
483
+ "kana": "べびーすたーちっぷすここいちばんやかつかれーあじ",
484
+
485
+ "maker": "おやつカンパニー",
486
+
487
+ "price": "128",
488
+
489
+ "type": "snack",
490
+
491
+ "regist": "2010年7月2日",
492
+
493
+ "url": "略/",
494
+
495
+ "tags": {
496
+
497
+ "tag": [
498
+
499
+ "カレー",
500
+
501
+ "コラボ",
502
+
503
+ "ベビースター",
504
+
505
+ "季節限定"
506
+
507
+ ]
508
+
77
509
  },
78
510
 
511
+ "image": "http://www.sysbird.jp/toriko/wp-content/blogs.dir/2/files/6833.gif",
512
+
513
+ "comment": "<p>略</p>\n"
514
+
515
+ //以下略
516
+
517
+ },
518
+
519
+ </p>\n"
520
+
521
+ }
522
+
523
+ ],
524
+
525
+ "status": "OK",
526
+
527
+ "count": "2"
528
+
529
+ }
530
+
79
531
  ```
80
532
 
81
533
 
82
534
 
83
-
84
-
85
- ```swift
86
-
87
- [やってみたコード]
88
-
89
-
90
-
91
- //取得したレスポンスデータ(JSON)を記録する構造体を宣言
92
-
93
-
94
-
95
- //InfoJson構造体に以下レスポンスデータを格納
96
-
97
- struct InfoJson : Codable {
98
-
99
-
100
-
101
- let name : String?
102
-
103
- let city : String?
104
-
105
- let state : String?
106
-
107
- let country : String?
108
-
109
-
535
+ ```swift
536
+
537
+
538
+
539
+ 参考書のコード
540
+
541
+
542
+
543
+ //Jsonのitem内のデータ構造
544
+
545
+ struct ItemJson: Codable {
546
+
547
+ //お菓子名前
548
+
549
+ let name: String?
550
+
551
+ //メーカー
552
+
553
+ let maker: String?
554
+
555
+ //掲載URL
556
+
557
+ let url: URL?
558
+
559
+ //画像のURL
560
+
561
+ let image: URL?
562
+
563
+ }
564
+
565
+
566
+
567
+ //JSONのデータ構造
568
+
569
+ struct ResultJson: Codable {
570
+
571
+ //複数要素
572
+
573
+ let item:[ItemJson]?
574
+
575
+ }
576
+
577
+
578
+
579
+ //searchokashiメソッド
580
+
581
+ func searchOkashi (keyword: String) {
582
+
583
+
584
+
585
+ //お菓子の検索キーワードをURLエンコードする
586
+
587
+ guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
588
+
589
+ return
590
+
591
+ }
592
+
593
+
594
+
595
+ //リクエストURLの組み立て
596
+
597
+ guard let req_url = URL(string:
598
+
599
+ "http://www.sysbird.jp/toriko/api/?apikey=guest&format=json&keyword=(keyword_encode)&max=10&prder=r") else {
600
+
601
+ return
602
+
603
+ }
604
+
605
+ print(req_url)
606
+
607
+
608
+
609
+ //リクエストに必要な情報を生成
610
+
611
+ let req = URLRequest(url: req_url)
612
+
613
+ //データ転送を管理するためのセッションを生成
614
+
615
+ let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
616
+
617
+ //リクエストをタスクとして登録
618
+
619
+ let task = session.dataTask(with: req, completionHandler: {
620
+
621
+ (data, response, error) in
622
+
623
+ //セッション終了
624
+
625
+ session.finishTasksAndInvalidate()
626
+
627
+ //do try catcyエラーハンドリング
628
+
629
+ do{
630
+
631
+ //JSONDecoderのインスタンス取得
632
+
633
+ let decoder = JSONDecoder()
634
+
635
+ //受け取ったJSONデータをパース(解析)して格納
636
+
637
+ let json = try decoder.decode(ResultJson.self, from:data!)
638
+
639
+
640
+
641
+
642
+
643
+ //お菓子の情報が取得できているか確認
644
+
645
+ if let items = json.item {
646
+
647
+ //お菓子のリストを初期化
648
+
649
+ self.okashiList.removeAll()
650
+
651
+ //取得したお菓子の数だけ処理
652
+
653
+ for item in items {
654
+
655
+ //お菓子の名前、メーカ名、掲載URL,画像URLをアンラップ
656
+
657
+ if let name = item.name, let maker = item.maker, let link = item.url, let image = item.image {
658
+
659
+ //1つのお菓子をタプルでまとめて管理
660
+
661
+ let okashi = (name, maker, link, image)
662
+
663
+ //お菓子の配列へ追加
664
+
665
+ self.okashiList.append(okashi)
666
+
667
+ }
668
+
669
+ }
670
+
671
+ //TableView を更新する
672
+
673
+ self.tableView.reloadData()
674
+
675
+ if let okashidbg = self.okashiList.first {
676
+
677
+ print ("-----------------")
678
+
679
+ print ("okashiList[0] = (okashidbg)")
680
+
681
+ }
682
+
683
+ }
684
+
685
+
686
+
687
+ } catch {
688
+
689
+ //エラー処理
690
+
691
+ print("エラーが出ました")
110
692
 
111
693
  }
112
694
 
113
-
114
-
115
- struct ResultJson : Codable {
695
+ })
116
-
117
-
118
-
696
+
119
- let venues : [InfoJson]?
697
+ //ダウンロード開始
698
+
699
+ task.resume()
700
+
701
+ }
702
+
703
+ //以下略
120
704
 
121
705
  }
122
706
 

10

2019/03/06 02:33

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
@@ -1 +1 @@
1
- Swift4 JSONデータをCodable格納する方法
1
+ Swift4 JSONデータをCodable格納する方法
test CHANGED
File without changes

9

2019/03/04 16:07

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
@@ -1 +1 @@
1
- Swift4 JSONをCodable格納する際の方法
1
+ Swift4 JSONデータCodable格納する方法
test CHANGED
@@ -1,4 +1,4 @@
1
- ### ????Swift4 ネストされたJSONをCodableで格納する際の方法
1
+ ### ????Swift4 JSONデータをCodableで格納する方法
2
2
 
3
3
 
4
4
 

8

2019/03/04 16:06

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -3,8 +3,6 @@
3
3
 
4
4
 
5
5
  はじめて質問させていただきます。
6
-
7
- プログラミングをswiftから初めて3ヶ月の超初心者でして、5時間程ググりながらあれこれ試しましたがうまくいかなかったので、質問させてください。
8
6
 
9
7
 
10
8
 

7

変更

2019/03/04 16:01

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -8,23 +8,17 @@
8
8
 
9
9
 
10
10
 
11
- 現在、FoursquareのAPIを利用て位置情報から周囲スポットを検索る機能を実装しようとしいます。
11
+ 以下のJSONデータをstrctに格納たいが、中身がnilなっています。
12
-
13
- 具体的には、リクエスト用のURLを作成し、JSONデータを構造体structにCodableを使ってレスポンスデータを格納し、パースして構造体に格納する処理を考えています。
14
12
 
15
13
 
16
14
 
17
- 扱うJSONデータは以下のものです。
18
-
19
- 中からname:東京駅、contact:{}、city:千代田区、state:東京駅、country:日本 のレスポンスデータをstruct格納したのです中身がnilなっしまいます。
15
+ JSONデータvenuesが配列なってる所原因予想していますが、調べてもわかりませんでした
20
16
 
21
17
 
22
18
 
23
- ネスト?や配列?絡んいて単にletやvarで宣言はダメなようです。
19
+ また、name2箇所あるの東京駅の方のnameを取出方法も教えていたきたいです。
24
20
 
25
21
 
26
-
27
- そこで、ネストがある以下のような場合のJSONデータをCodableを用いて格納する方法をご教授いただけませんでしょうか。
28
22
 
29
23
  どうぞよろしくおねがいします。
30
24
 
@@ -38,9 +32,51 @@
38
32
 
39
33
 
40
34
 
41
- {"meta":{"code":200,"requestId":"5c7b2b709fb6b74141127408"},"response":{"venues":[{"id":"4b0587a6f964a5203e9e22e3","name":"東京駅","contact":{},"location":{"address":"丸の内1","lat":35.680943,"lng":139.767202,"labeledLatLngs":[{"label":"display","lat":35.680943,"lng":139.767202}],"distance":33,"postalCode":"100-0005","cc":"JP","city":"千代田区","state":"東京都","country":"日本","formattedAddress":["丸の内1","千代田区, 東京都","100-0005","日本"]},"categories":[{"id":"4bf58dd8d48988d129951735","name":"鉄道駅","pluralName":"鉄道駅","shortName":"鉄道駅","icon":{"prefix":"https://ss3.4sqi.net/img/categories_v2/travel/trainstation_","suffix":".png"},"primary":true}],"verified":false,"stats":{"tipCount":0,"usersCount":0,"checkinsCount":0,"visitsCount":0},"beenHere":{"count":0,"lastCheckinExpiredAt":0,"marked":false,"unconfirmedCount":0},"hereNow":{"count":37,"summary":"37 人の人たちがここにいます","groups":[{"type":"others","name":"ここに他の人たちがいます","count":37,"items":[]}]},"referralId":"v-1551575920","venueChains":[],"hasPerk":false}],"confident":false}}
35
+ {
42
36
 
37
+ "meta": {
43
38
 
39
+ "code": 200,
40
+
41
+ "requestId": "5c7d37781ed2196e4631bc6f"
42
+
43
+ },
44
+
45
+ "response": {
46
+
47
+ "venues": [
48
+
49
+ {
50
+
51
+ "id": "4b0587a6f964a5203e9e22e3",
52
+
53
+ "name": "東京駅",
54
+
55
+ "city": "千代田区",
56
+
57
+ "state": "東京都",
58
+
59
+ "country": "日本",
60
+
61
+ },
62
+
63
+ "categories": [
64
+
65
+ {
66
+
67
+ "id": "4bf58dd8d48988d129951735",
68
+
69
+ "name": "鉄道駅",
70
+
71
+ "pluralName": "鉄道駅",
72
+
73
+ "shortName": "鉄道駅",
74
+
75
+ ],
76
+
77
+
78
+
79
+ },
44
80
 
45
81
  ```
46
82
 
@@ -50,61 +86,31 @@
50
86
 
51
87
  ```swift
52
88
 
53
- [現在のコード]
89
+ [やってみたコード]
54
90
 
55
91
 
56
92
 
57
- //取得したレスポンスデータ(JSON)を記録する構造体を宣言
93
+ //取得したレスポンスデータ(JSON)を記録する構造体を宣言
58
94
 
59
95
 
60
96
 
61
- //ItemJson構造体に以下のレスポンスデータを格納
97
+ //InfoJson構造体に以下のレスポンスデータを格納
62
98
 
63
- //JSONがネスト構造なので適当な名前のstrctを宣言
64
-
65
- struct ItemJson : Codable {
99
+ struct InfoJson : Codable {
66
-
67
-
68
-
69
- let response : ItemJson2
70
100
 
71
101
 
72
102
 
73
- struct ItemJson2 : Codable {
103
+ let name : String?
74
104
 
75
-
105
+ let city : String?
76
106
 
77
- let venues :ItemJson3
107
+ let state : String?
78
108
 
79
-
109
+ let country : String?
80
110
 
81
- struct ItemJson3 : Codable {
111
+
82
-
83
-
84
-
85
- let name : String?
86
-
87
- let contact : String?
88
-
89
- let city : String?
90
-
91
- let state : String?
92
-
93
- let country : String?
94
112
 
95
113
  }
96
-
97
- }
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
- }
108
114
 
109
115
 
110
116
 
@@ -112,109 +118,7 @@
112
118
 
113
119
 
114
120
 
115
- let item : [ItemJson]?
116
-
117
- }
118
-
119
-
120
-
121
-
122
-
123
- //現在位置ボタンタップ時リクエストURL作成
124
-
125
- @IBAction func searchNearVenue(_ sender: Any) {
126
-
127
-
128
-
129
- let clientId = "secret"
130
-
131
- let clientSecret = "secret"
132
-
133
-
134
-
135
- // 現在位置を東京駅に指定
136
-
137
- let currentLocation_latitude = 35.681236
138
-
139
- let currentLocation_longitude = 139.767125
140
-
141
-
142
-
143
-
144
-
145
- guard let req_url = URL (string : "https://api.foursquare.com/v2/venues/search?v=20180228&ll=(currentLocation_latitude),(currentLocation_longitude)&intent=checkin&limit=10&radius=4000&client_id=(clientId)&client_secret=(clientSecret)")
146
-
147
- else {
148
-
149
- return
150
-
151
- }
152
-
153
-
154
-
155
-
156
-
157
- //以下で、req_urlにアクセスし構造体にレスポンスデータを格納する処理を行う
158
-
159
-
160
-
161
- let req = URLRequest(url: req_url)
162
-
163
-
164
-
165
- let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
166
-
167
-
168
-
169
- let task = session.dataTask(with: req, completionHandler: {
170
-
171
- (data, response, error) in
172
-
173
-
174
-
175
- session.finishTasksAndInvalidate()
176
-
177
-
178
-
179
- do {
180
-
181
-
182
-
183
- let decoder = JSONDecoder()
184
-
185
-
186
-
187
- //受け取ったJSONデータをパースして格納
188
-
189
- let json = try decoder.decode(ResultJson.self, from: data!)
190
-
191
-
192
-
193
- print (json)
194
-
195
- //ここでエラーが発生して、ResultJson : nilと返されてしまいます
196
-
197
-
198
-
199
- } catch {
200
-
201
-
202
-
203
- print("エラーが発生しました")
204
-
205
-
206
-
207
- }
208
-
209
-
210
-
211
- })
212
-
213
-
214
-
215
- task.resume()
216
-
217
-
121
+ let venues : [InfoJson]?
218
122
 
219
123
  }
220
124
 

6

修正

2019/03/04 15:06

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -48,11 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- ```swift 4
51
+ ```swift
52
-
53
-
54
-
55
-
56
52
 
57
53
  [現在のコード]
58
54
 

5

修正

2019/03/03 09:30

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
@@ -1 +1 @@
1
- Swift4 ネストされたJSONをCodableで格納する際の方法
1
+ Swift4 JSONをCodableで格納する際の方法
test CHANGED
File without changes

4

修正

2019/03/03 09:29

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,14 @@
1
- ### Swift4 ネストされたJSONをCodableで格納する際の方法
1
+ ### ????Swift4 ネストされたJSONをCodableで格納する際の方法
2
2
 
3
3
 
4
4
 
5
5
  はじめて質問させていただきます。
6
6
 
7
- プログラミングをswiftから初めて3ヶ月の超初心者でして、5時間程ググりながらあれこれ試しましたがうまくかなかったので、質問させてください。
7
+ プログラミングをswiftから初めて3ヶ月の超初心者でして、5時間程ググりながらあれこれ試しましたがうまくかなかったので、質問させてください。
8
-
9
-
10
-
8
+
9
+
10
+
11
- 現在、FoursquareのAPIを利用して現在位置から周囲のスポットを検索する機能を実装しようとしています。
11
+ 現在、FoursquareのAPIを利用して位置情報から周囲のスポットを検索する機能を実装しようとしています。
12
12
 
13
13
  具体的には、リクエスト用のURLを作成し、JSONデータを構造体structにCodableを使ってレスポンスデータを格納し、パースして構造体に格納する処理を考えています。
14
14
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  扱うJSONデータは以下のものです。
18
18
 
19
- この中からname:東京駅、contact:{}、city:千代田区、state:東京駅、country:日本 のレスポンスデータをstructに格納したいのですがせんでした
19
+ この中からname:東京駅、contact:{}、city:千代田区、state:東京駅、country:日本 のレスポンスデータをstructに格納したいのですが中身がnilとなってしまいま
20
20
 
21
21
 
22
22
 
@@ -30,6 +30,10 @@
30
30
 
31
31
 
32
32
 
33
+ ```JSON
34
+
35
+
36
+
33
37
  [JSONデータ]
34
38
 
35
39
 
@@ -38,6 +42,16 @@
38
42
 
39
43
 
40
44
 
45
+ ```
46
+
47
+
48
+
49
+
50
+
51
+ ```swift 4
52
+
53
+
54
+
41
55
 
42
56
 
43
57
  [現在のコード]
@@ -182,7 +196,7 @@
182
196
 
183
197
  print (json)
184
198
 
185
- //コードを実行するとここでエラーが発生して、ResultJson : nilと返されてしまいます
199
+ //ここでエラーが発生して、ResultJson : nilと返されてしまいます
186
200
 
187
201
 
188
202
 
@@ -207,3 +221,5 @@
207
221
 
208
222
 
209
223
  }
224
+
225
+ ```

3

修正

2019/03/03 08:35

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- ネスト?や配列?が絡んでいて単にletやvarで宣言するだけではダメなのはわかったのです
23
+ ネスト?や配列?が絡んでいて単にletやvarで宣言するだけではダメなようです。
24
24
 
25
25
 
26
26
 
@@ -182,6 +182,8 @@
182
182
 
183
183
  print (json)
184
184
 
185
+ //コードを実行するとここでエラーが発生して、ResultJson : nilと返されてしまいます
186
+
185
187
 
186
188
 
187
189
  } catch {

2

修正

2019/03/03 08:25

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
File without changes
test CHANGED
@@ -20,6 +20,10 @@
20
20
 
21
21
 
22
22
 
23
+ ネスト?や配列?が絡んでいて単にletやvarで宣言するだけではダメなのはわかったのですが。
24
+
25
+
26
+
23
27
  そこで、ネストがある以下のような場合のJSONデータをCodableを用いて格納する方法をご教授いただけませんでしょうか。
24
28
 
25
29
  どうぞよろしくおねがいします。
@@ -46,6 +50,8 @@
46
50
 
47
51
  //ItemJson構造体に以下のレスポンスデータを格納
48
52
 
53
+ //JSONがネスト構造なので適当な名前のstrctを宣言
54
+
49
55
  struct ItemJson : Codable {
50
56
 
51
57
 
@@ -68,6 +74,14 @@
68
74
 
69
75
  let name : String?
70
76
 
77
+ let contact : String?
78
+
79
+ let city : String?
80
+
81
+ let state : String?
82
+
83
+ let country : String?
84
+
71
85
  }
72
86
 
73
87
  }
@@ -76,17 +90,7 @@
76
90
 
77
91
 
78
92
 
79
-
80
-
81
-
82
-
83
- // let contact : String?
93
+
84
-
85
- // let city : String?
86
-
87
- // let state : String?
88
-
89
- // let country : String?
90
94
 
91
95
 
92
96
 

1

誤字

2019/03/03 07:48

投稿

tomotomo104114
tomotomo104114

スコア15

test CHANGED
@@ -1 +1 @@
1
- Swift4 ネストされたJSONをCodableで格納する際のコード
1
+ Swift4 ネストされたJSONをCodableで格納する際の方法
test CHANGED
@@ -1,4 +1,4 @@
1
- ### Swift4 ネストされたJSONをCodableで格納する際のコード
1
+ ### Swift4 ネストされたJSONをCodableで格納する際の方法
2
2
 
3
3
 
4
4