現在APIを叩いて返ってきた値を使ってUITableViewで表示するアプリを書いています。Alamofireのresponse.result.valueで取得できる値は以下のようになっています。
json
1[{"created_at" : "aaa" 2"author" : "bbb" 3"score" : "ccc" 4 5},{ 6"created_at" : "aaa" 7"author" : "bbb" 8"score" : "ccc" 9}]
DataModelを作成して代入するところが以下のようになっています。
swift
1 func getCellData(json:JSON){ 2 if let postedDateUnixTime = json[0]["created_at"].string { 3 postedDataModel.postedBy = json[0]["author"].stringValue 4 postedDataModel.scoreNumber = json[0]["score"].stringValue 5 print(postedDataModel.postedBy) 6 } 7 else{ 8 print("API unavailable") 9 } 10 } 11
-
複数の{}があるとループ処理が要るのでとりあえず1つだけオプションで取得して、項目が抜き出せているか確認したのですが、どうやってもelseに流れてしまいます。
-
ifを外して実行したところpostedDateUnizTimeでnilになってクラッシュしました。
-
一番外にある[]が原因なのかと思っていますが、ルートが配列のJSONに対して具体的にどうするべきなのかがわかりません。
インデントを揃えて下さい。見にくいです。
一方だけ伏せているのだと思うのですが、"項目1" か ["created_at"] か、どちらかに合わせて下さい。
今のコードだとデータを取り出せなくて当然です。
>>返り値は以下のようになっています
これは、どこで何を表示した結果でしょうか?
どこのインデントでしょうか、すみません どこが揃うべきなのかいまいちわかっていないもので…
返り値は質問文に追記しました。
この関数の前準備としてJSONを取得する関数があり、そのなかでresponse.result.valueをprintで途中で吐かせている形です。JSONを取得はできていることを言いたかったです。
>>JSONを取得はできていることを言いたかったです
getCellData(json:JSON) の中で json が正しく受け取れているか確認して下さい。
>>一番外にある[]が原因なのかと思っていますが
[ ]は配列ということです。
きちんと受け取れていなかったようです。実際nilがでているので
DataModelを使用せず単に配列に代入するように書き直したところ自己解決してしまいました。なぜダメだったのかは分からず終いですが…
ルートが配列の形になっていてもjson["0"]["created_at"]のように抜き出すことはできるのでしょうか?
>>実際nilがでているので
変数jsonがnilだったってことですか?
そうであれば、getCellData(json:)を呼び出しているコード見ないと原因は分かりません。
>>json["0"]["created_at"]のように
json["0"] じゃダメですよ。これは辞書型のアクセス方法です。
回答2件
あなたの回答
tips
プレビュー