実現したいこと
SwiftyJSONを使ってJSONファイルのデータを取得したい
発生している問題・エラーメッセージ
現在SwiftyJSONを使って、Wikiからデータを取得したものを加工しようと考えております。
取得したいJSONデータのURL
https://ja.wikipedia.org/w/api.php?action=query&prop=revisions&titles=7%E6%9C%8831%E6%97%A5&format=json&rvprop=content
該当のソースコード
swift
1 override func viewDidLoad() { 2 super.viewDidLoad() 3 // Do any additional setup after loading the view. 4 let baseURL = "https://ja.wikipedia.org/w/api.php?action=query&prop=revisions&titles=7%E6%9C%8831%E6%97%A5&format=json&rvprop=content" 5 6 getArticleData(url: baseURL) 7 } 8 9//WikiAPIを使用して今日の出来事を引っ張ってくる 10 func getArticleData(url: String) { 11 12 AF.request(url, method: .get).responseJSON{ (response) in switch response.result { 13 //データの取得に成功した場合 14 case .success: 15 16 let json = JSON(response.data as Any) 17 18 //★★★★★ここの[]の記述がうまくいかない 19 if json["query"]["pages"]["5596"]["revisions"]["0"]["*"].string != nil { 20 self.strAPItext = json["query"]["pages"]["5596"]["revisions"]["0"]["*"].string! 21 } else { 22 self.strAPItext = "そんなデータはありません" 23 } 24 25 case .failure(let error): 26 print(error) 27 print(".failureブロックに入りました") 28 self.strAPItext = "そんなデータはありません" 29 } 30 31 } 32 33 self.textView.text = self.strAPItext 34 35 }
試したこと
数字に関する部分をダブルクォートを外したりしてみましたが、うまくいきませんでした。
こちらについて詳しい方いらっしゃいましたらご教授願います。
宜しくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
revisions は配列なので、その後ろの ["0"] を [0] にすれば良いのでは。
SwiftJSON は、値が存在しない場合 nil ではなく JSON.null というオブジェクトを返し、それに対する要素のアクセスも JSON.null になるようですね。エラーにならないのはいいけど、「値がない」と言うことに気づきにくいという問題が…。
あと、self.textView.text = self.strAPItext を書く場所も間違ってますね。
hoshi様
いつもありがとうございます。
一発、一瞬で解決できました(笑)
相変わらず、すごすぎです(笑)
SwiftyJSONはそのような問題があるのですね。
まだまだJSONファイル自体もわからないことだらけですが、他にも色々調べてみます。
本当にありがとうございました。
hoshi-takanori様のアドバイスのもと解決できました。
revisionsは配列とのことで、その後ろの["0"]を[0]にしたら解決できました。
json["query"]["pages"]["5596"]["revisions"][0]["*"].string
hoshi様
お分かりになりましたら、教えていただきたいのです。
こちらのURLは7月30日の出来事ページなのですが、
https://ja.wikipedia.org/w/api.php?action=query&prop=revisions&titles=7%E6%9C%8830%E6%97%A5&format=json&rvprop=content
質問時7月31日は["5596"]の部分が7月30日は["5595"]と1日ずれるたびに1ずつ変化するような仕様になっているのですが、こちらの動的な値の取得ってスムーズにやる方法ってありますか?
起点日(1月1日など)に変数countDateを使って+1していけば強引にはかけるような気がするのですが、サイトの構成がそのパターンにはまらなかった場合エラーとなりそうな気がしております(汗)

回答1件
あなたの回答
tips
プレビュー