質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2225閲覧

Swift4:ネストされテイルJsonデータの取得方法

panyayan

総合スコア36

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/23 14:35

編集2018/08/24 05:16

タイトルの通りです。
collectionViewControllerでAPIで取得したテキストを表示したく
Codableを使用してAPIで取得したJsonデータを整形しています。
その中のネストされているデータを全て取得したい(for文のイメージ)のですが、どのようにコードを描けばよろしいでしょうかご教授いただけると幸いです。

下記のように書いてみましたがtag[0].nameだと一つしか取得できないのでtag内のnameを全て取得できるようにしたいです。

GetJsonDataCode

1store![indexPath.row].tag[0].name

Codable

1truct Store : Codable { 2 let id : Int 3 let name : String 4 let location : String 5 let price : String 6 let open_time : String 7 let closed_day : String 8 let categories : [categories] 9 let tags : [tags] 10 11 struct categories : Codable { 12 let id : Int 13 let name : String 14 } 15 16 struct tags: Codable { 17 let id : Int 18 let name : String 19 } 20} 21

JsonDecode

1 2 let url = URL(string: "http://localhost:8000/store/api?store_id=" + store_id) 3 let request = URLRequest(url: url!) 4 let session = URLSession.shared 5 6 let encoder: JSONEncoder = JSONEncoder() 7 encoder.dateEncodingStrategy = .iso8601 8 encoder.outputFormatting = .prettyPrinted 9 10 session.dataTask(with: request){(data, response, error)in if error == nil, 11 let data = data, 12 let response = response as? HTTPURLResponse{ 13 14 let decoder: JSONDecoder = JSONDecoder() 15 decoder.dateDecodingStrategy = .iso8601 16 do { 17 18 let json = try decoder.decode(Store.self, from: data) 19 20 // for store in (json.stores){ 21 // for photo in (store.photos){ 22 // print(photo.path as Any) 23 // } 24 // } 25 26 27 self.store = [json] 28 29 DispatchQueue.main.async { 30 self.nameLabel.text = json.name 31 self.locationLabel.text = json.location 32 } 33 34 } catch { 35 print("error:", error.localizedDescription) 36 37 } 38 39 } 40 41 }.resume()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/08/24 01:11

pathとnameが混在しているので修正して下さい。
fuzzball

2018/08/24 01:35

まだ残ってますよ‥。
fuzzball

2018/08/24 04:04

store![indexPath.row].tags の出力を教えて下さい。(文字列などは伏せ字にしてもらってかまいません)
panyayan

2018/08/24 04:23

出力内容は ["aaa", "bbb", "ccc"] のように出力されています
fuzzball

2018/08/24 04:27

??? なぜStringの配列なんでしょうか?.tags って struct tagsの配列じゃないんですか?
panyayan

2018/08/24 04:33

はいそうです。 しかし、Stringの配列で出力されます。APIで取得する変数はvar store : [Store]?と宣言しています。取得された物を代入する際は self.store = [json]としています
fuzzball

2018/08/24 04:48 編集

JSONをデコードするところから self.store = [json] までのコードを書いて下さい。
fuzzball

2018/08/24 05:27

ちなみに ["aaa", "bbb", "ccc"] って、あなたが質問している「tag内のnameを全て」ではないのでしょうか?
panyayan

2018/08/24 05:29

確かにそうですが、できれば全てString取得したいです
fuzzball

2018/08/24 05:33

全てStringに見えますが、そうじゃないんですか?
fuzzball

2018/08/24 05:48

あと、症状を再現できないので、再現できるJSONデータを用意して下さい。
guest

回答1

0

ベストアンサー

以下のようにtag.nameの配列にしてはどうでしょう?

swift

1let tagNames = store![indexPath.row].tags.map { $0.name }

投稿2018/08/23 15:21

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panyayan

2018/08/24 02:59

ご回答ありがとうございます。 上記のようにして表示しようと代入したところ下記のエラーが出てしまいます `Cannot convert value of type 'Never' to expected argument type 'String'`
kakajika

2018/08/25 06:30

その代入しようとしているコードを載せていただかないことにはなんとも言えないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問