Swift5 RestApi JSONデータの取得
【Swift5】 WordpressサイトのRESTAPIで
WEB上のJSONデータを取得しTebleViewに表示したい
投稿のタイトルとアイキャッチ画像をTebleViewに表示したいのですが
とあるサイトではデータを取得しタイトルとアイキャッチ画像の一覧を取得・表示することができました
しかし、WordpressのRestApiで投稿を取得しようとしましたがエラーが出てしまいました。
取得・表示できた:例
JSON
"title": "初めてのIOSアプリ開発"
"user": {
"mame": " 初心者くん"
"source_url": "https://example.jp/img/mainphoto.jpg"
},
swift
//【構造体】が
struct Topic: Codable {
let title: String
let user: User
enum CodingKeys: String, CodingKey {
case title = "title"
case user = "user"
}
}
struct User: Codable {
let sourceUrl: String
enum CodingKeys: String, CodingKey {
case sourceUrl = "source_url"
}
}
//下記のように[Topic]という構造体でタイトル・アイキャッチ画像が取得ができました
if let data = data {
do{
let topic = try JSONDecoder().decode([Topic].self, from: data)
self.topics = topic
DispatchQueue.main.async {
self.tableView.reloadData()
}
print("json: ", topic)
} catch(let err){
print("失敗しました。:", err)
}
}
しかし下記のようなWordpressのJSONデータが取得できませんでした
"title": "初めてのIOSアプリ開発"
"_embedded": {
"wp:featuredmedia": [
{
"id": 1335,
"media_type": "image",
"mime_type": "image/jpeg",
"source_url": "https://example.jp/img/mainphoto.jpg"
}
],
}
swift
//【構造体】が
struct Topic: Codable {
let title: Title
let embedded: Embedded
enum CodingKeys: String, CodingKey {
case title = "title"
case embedded = "_embedded"
}
}
struct Embedded: Codable {
let wpFeaturedmedia: WpFeaturedmedia
enum CodingKeys: String, CodingKey {
case wpFeaturedmedia = "wp:featuredmedia"
}
}
struct WpFeaturedmedia: Codable {
let sourceUrl: String
enum CodingKeys: String, CodingKey {
case sourceUrl = "source_url"
}
}
if let data = data {
do{
let topic = try JSONDecoder().decode([Topic].self, from: data)
self.topics = topic
DispatchQueue.main.async {
self.tableView.reloadData()
}
print("json: ", topic)
} catch(let err){
print("失敗しました。:", err)
}
}
//でまた下記で[Topic]という構造体で取得しようとするも...
ビルドは成功するが取得時のエラーになる
失敗しました。: typeMismatch(Swift.Dictionary<Swift.String, Any>,
Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "_embedded", intValue: nil),
CodingKeys(stringValue: "wp:featuredmedia", intValue: nil)],
debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))
原因はよく見ると[ ]の配列が入っているから構造体の書き方が間違ってるのかな思います。
"wp:featuredmedia": [
{
"id": 1335,
"media_type": "image",
"mime_type": "image/jpeg",
"source_url": "https://example.jp/img/mainphoto.jpg"
}
],
しかしこの後の解決策がよくわかりません。
大変申し訳ございません。どなたかご教授していただけないでしょうか
よろしくお願い致します。
0 likes