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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Swift

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

2985閲覧

SwiftyJson,Alamofireを使用した際、データを配列に入れる処理について

po_tato

総合スコア97

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Swift

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

1クリップ

投稿2017/08/01 11:39

編集2017/08/01 11:40

SwiftyJson,Alamofireを使用した際、
データを配列に入れる処理について質問です。
このようなコードがある時、基本的にforeachを使用してそのdateのリストの数だけ
配列に入れていくと思うのですが、そうではなく、
一回だけループさせるにはどうすればいいですか?
教えていただけたら幸いです。

Alamofire.request(.GET, "https://qiita.com/api/v2/items") .responseJSON { response in guard let object = response.result.value else { return } let json = JSON(object) json.forEach { (_, json) in let article: [String: String?] = [ "title": json["title"].string, "userId": json["user"]["id"].string ] self.articles.append(article) } ```````

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

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

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

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

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

fuzzball

2017/08/02 00:15

最初の要素だけ取り出したいということでしょうか?
po_tato

2017/08/02 00:47 編集

はいそうです! [ { title: "AlamofireとSwiftyJSONで〜",   body: "はじめに〜",   created_at: "2015-12-03 22:17:32" },   { title: "Optionalを〜",    body: "この記事は〜",    created_at: "2015-12-04 11:41:26" }   ] このようにデータがあるとして、 最初の{...},の三つのデータだけ取りたいです。 一つの辞書型のjsonデータと言えばいいですかね。 修正したのですが、見づらくて申し訳ないです、
guest

回答3

0

最初の3つだけなら

swift

1let json = JSON(object) 2if let array = json.array, // arrayがOptionalではない 3 case (0...array.count) = 3 { // 要素数が3以上 4 5 array[0..<3].forEach { json in // 最初の3つだけ 6 7 8

こうですかね

投稿2017/08/02 02:55

MasakiHori

総合スコア3384

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

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

po_tato

2017/08/02 05:06

このような方法もあるのですね!教えていただきありがとうございます!
guest

0

ベストアンサー

動作確認していませんが、これでどうでしょうか?

swift

1if let first = json.first { 2 let article: [String: String?] = [ 3 "title": first.1["title"].string, 4 "userId": first.1["user"]["id"].string 5 ] 6 self.articles.append(article) 7}

【追記】

json[index]でアクセス出来ますので、最初の3つを取り出すなら普通にforループでいいのでは?
min(json.count, 3)で記事が3未満のときの対応をしています。

swift

1for i in 0..<min(json.count, 3) { 2 let article: [String: String?] = [ 3 "title": json[i]["title"].string, 4 "userId": json[i]["user"]["id"].string 5 ] 6 self.articles.append(article) 7}

2個目、3個目に直接アクセスしたいならjson[1]、json[2]でOKです。

投稿2017/08/02 01:02

編集2017/08/02 03:06
fuzzball

総合スコア16731

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

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

po_tato

2017/08/02 02:44

json["xxx"].firstといった形で最初の要素取得できました!ですが、二つ目を取ろうとjson["xxx"].secondと記載してもできません。私はその要素をランダムで一つ取得したくて今回このようなループをせず特定の要素取得の質問をさせていただきました。二つ目、三つ目だけ取得ということもfirstと同じように本来出来るものなのでしょうか?お力を貸してください。
fuzzball

2017/08/02 03:03

回答に追記しました。
po_tato

2017/08/02 04:10

min(json.count,3)は(左,右)を比較し、小さい方を使用するという認識でいいですか?また、"title": json[i]["title"].string, このような書き方だとなぜかfatal error: unexpectedly found nil while unwrapping an Optional valueエラーとなりました。(>_<)
fuzzball

2017/08/02 04:31

min()についてはその認識で合っています。 json[i]!["title"].string か json[i]["title"]!.string でいけますか?
po_tato

2017/08/02 05:05 編集

そのように!をつけたらdelete !と修正されてしまいます。結果としてjson[i]["title"].string!と出来ましたが、結果は変わらずエラーが出ました。
fuzzball

2017/08/02 05:16 編集

let json = JSON(object) の下に下記のコードを追加して出力を教えて下さい。 print(type(of: json), type(of: json[0]), type(of: json[0]["title"])) print(json[0]["title"])
po_tato

2017/08/02 05:26

JSON JSON JSON null でした。
fuzzball

2017/08/02 05:31 編集

titleがnil(null)になることがあるのでしょうか? それならばnilチェックをしないといけませんが‥。 そうなるときのURLを書けますか?
po_tato

2017/08/02 05:44

すみません、私のjsonデータは "list" : [ { "Title" : "xxx", "userid" : "xxx" }, ] このような形でデータが入っておりました。 ですので、このような形でやり直してみたところ print(type(of: json), type(of: json[0]), type(of: json[0]["title"])) print(json["list"][0]["title"]) JSON JSON JSON 1 と出ました。
po_tato

2017/08/02 05:51

これで json["list"][i]["title"].string!として、[i]の部分をリストの数以下の乱数を設定してあげたら、ランダムで一つの要素から取得できそうです! 何から何まで本当に親切にありがとうございます!!
guest

0

ObjectMapperというライブラリをPodでインストールしましょう

モデルクラスを定義すれば勝手にjsonをオブジェクトにマッピングします。

使いこなせるまでは大変ですが一度実装しちゃえばコピペで利用可能です。

Swift ObjectMapperなどでググりましょう。

参考サイト
http://qiita.com/ymmtyuhei/items/7448cf7cd549cca94525

投稿2017/08/01 17:03

Tak1016

総合スコア1408

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

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

po_tato

2017/08/02 00:52

手強そうですね、参考にしてみます! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問