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

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

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

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

解決済

Swift SwiftyJSONでWikiからデータを取得したい。

ataru2222
ataru2222

総合スコア240

Swift

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

1回答

0リアクション

0クリップ

186閲覧

投稿2022/08/05 12:43

実現したいこと

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

override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view.    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" getArticleData(url: baseURL) } //WikiAPIを使用して今日の出来事を引っ張ってくる func getArticleData(url: String) { AF.request(url, method: .get).responseJSON{ (response) in switch response.result { //データの取得に成功した場合 case .success: let json = JSON(response.data as Any) //★★★★★ここの[]の記述がうまくいかない if json["query"]["pages"]["5596"]["revisions"]["0"]["*"].string != nil { self.strAPItext = json["query"]["pages"]["5596"]["revisions"]["0"]["*"].string! } else { self.strAPItext = "そんなデータはありません" } case .failure(let error): print(error) print(".failureブロックに入りました") self.strAPItext = "そんなデータはありません" } } self.textView.text = self.strAPItext }

取得したいデータの構造
イメージ説明

試したこと

数字に関する部分をダブルクォートを外したりしてみましたが、うまくいきませんでした。
こちらについて詳しい方いらっしゃいましたらご教授願います。

宜しくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hoshi-takanori

2022/08/05 13:16

revisions は配列なので、その後ろの ["0"] を [0] にすれば良いのでは。 SwiftJSON は、値が存在しない場合 nil ではなく JSON.null というオブジェクトを返し、それに対する要素のアクセスも JSON.null になるようですね。エラーにならないのはいいけど、「値がない」と言うことに気づきにくいという問題が…。
hoshi-takanori

2022/08/05 13:18

あと、self.textView.text = self.strAPItext を書く場所も間違ってますね。
ataru2222

2022/08/05 13:35

hoshi様 いつもありがとうございます。 一発、一瞬で解決できました(笑) 相変わらず、すごすぎです(笑) SwiftyJSONはそのような問題があるのですね。 まだまだJSONファイル自体もわからないことだらけですが、他にも色々調べてみます。 本当にありがとうございました。
ataru2222

2022/08/05 13:38

hoshi-takanori様のアドバイスのもと解決できました。 revisionsは配列とのことで、その後ろの["0"]を[0]にしたら解決できました。 json["query"]["pages"]["5596"]["revisions"][0]["*"].string
ataru2222

2022/08/06 02:32

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していけば強引にはかけるような気がするのですが、サイトの構成がそのパターンにはまらなかった場合エラーとなりそうな気がしております(汗)

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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