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

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

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

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

Q&A

解決済

1回答

289閲覧

Swift SwiftyJSONにて動的な項目の値を抽出したい。

ataru2222

総合スコア272

Swift

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

0グッド

0クリップ

投稿2022/08/07 06:09

編集2022/08/08 20:30

実現したいこと

SwiftyJSONにて動的な項目の値を抽出したい。

発生している問題・エラーメッセージ

前回こちらの質問をさせていただいたのですが、
https://teratail.com/questions/nv65waruaqr0pa

WikiAPIから値を取得する際に取得する項目が動的に変化してしまい対応に困っております。

7月31日
https://ja.wikipedia.org/w/api.php?action=query&prop=revisions&titles=7%E6%9C%8831%E6%97%A5&format=json&rvprop=content

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"
7月29日 "5594"

と変化してしまっております。
よってコードを
json["query"]["pages"]["5596"]["revisions"][0][""].string
json["query"]["pages"]["5595"]["revisions"][0]["
"].string
json["query"]["pages"]["5594"]["revisions"][0]["*"].string
のように書き換えて取得しなければいけない状態です。

試したこと

変数 countDate = "5596"
json["query"]["pages"][countDate]["revisions"][0]["*"].string
などの変数記述によって取得できることは確認しました。

こちらについて基準日(1月1日)などの設けて
countDateに+1していけば、強引に動的には書けそうなのですが、
閏年がある年など例外が発生した場合、それ以降の日付が正しく取れない可能性があります。

このような場合、どのように対応したら良いでしょうか?
詳しい方いらっしゃいましたら、ご教授願います。
宜しくお願いいたします。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

pagesの一つ目の子要素を取り出したいだけでしたら、このようにしてみてはどうですか?

swift

1guard let (_, page) = json["query"]["pages"].first else { return } 2 3page["revisions"][0]["*"].string

または

swift

1json["query"]["pages"].first?.1["revisions"][0]["*"].string

投稿2022/08/07 09:07

編集2022/08/07 09:10
yodo

総合スコア28

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

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

ataru2222

2022/08/08 11:30

yodo様 すごいです!! やりたいことができました。 こんな書き方できること、本当に勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問