Нужна помощь в разборе Википедии JSON API в SWIFT - PullRequest
0 голосов
/ 29 января 2019

Ниже приведен json для страницы WIKI.(формат, вероятно, далеко, так что вот ссылка, где его лучше увидеть: https://en.wikipedia.org/w/api.php?action=query&prop=pageimages&titles=John_F._Kennedy&pithumbsize=500)

{"batchcomplete": "", "query": {"normalized": [{"из ":" John_F._Kennedy "," to ":" John F. Kennedy "}]," pages ": {" 5119376 ": {" pageid ": 5119376," ns ": 0," title ":" JohnФ. Кеннеди "," thumbnail ": {" source ":" https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/John_F._Kennedy%2C_White_House_photo_portrait%2C_looking_up.jpg/385px-John_F._Kennedy%2C_White_House_photo_portrait%2C_looking_up.jpg", "width": 385, "height": 500}, "pageimage": "John_F._Kennedy, _White_House_photo_portrait, _looking_up.jpg"}}}}

Я создал свои структуры для представления ключей json, но не могу понять, какую структуру или переменную я могу написать, чтобы представить число 5119376, которое, по-видимому, является объектом.другие значения ключа являются строками и не меняются. Но этот ключ странный, потому что это целое число, и он меняется с вики-страницы на вики-страницу. Поэтому я не знаю, как назвать этот ключ, потому что он, предположительно, номер И он меняется скаждую страницу.

Я попытался распечатать весь объект, чтобы посмотреть, как он выглядит в консоли:

{WikiStruct (query:quote_project.QueryStruct (pages: необязательно (quote_project.PageStruct (pageid: nil, ns: nil, title: nil, миниатюра: nil, pageimage: nil))), пакетное выполнение: необязательно (""))}

Таким образом, компьютер получил, что "batchcomplete - пустая строка" ", и он также принимает нормализованные данные.Но это говорит о том, что все внутри странного объекта 5119376 - ноль.Кстати, моя конечная цель состоит в том, чтобы получить доступ к URL, который дает основное изображение jpg страницы вики

Я получаю следующую ошибку:

 Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

Мои структуры ниже,Я пытался как игнорировать объект 5119376, так и пытаться создать для него некую структуру, но безрезультатно

struct WikiStruct: Decodable {

var query: QueryStruct
var batchcomplete: String?

}

struct QueryStruct: Decodable {

var normalized: [NormalizedStruct]?
var pages: PageStruct?

}

struct NormalizedStruct: Decodable{

var from: String?
var to: String?
}

struct PageStruct: Decodable{

var pageid: Int?
var ns: Int?
var title: String?
var thumbnail: ThumbStruct?
var pageimage: String?

}

struct ThumbStruct: Decodable{

var source: String?//this is what I want
var width: Int?
var height: Int?

}

1 Ответ

0 голосов
/ 08 мая 2019

Имел сегодня точно такую ​​же проблему.Успел ее решить.По сути, данные, вложенные в страницы, являются объектами с ключами, ключ - 5119376. Чтобы разобрать это, просто измените переменную страниц в QueryStruct на словарь.Примерно так:

struct QueryStruct: Decodable {

var normalized: [NormalizedStruct]?
var pages: [String:PageStruct]?

}

После этого я могу успешно проанализировать объект.Печать объекта WikiStruct:

WikiStruct(query: QueryStruct(normalized: [NormalizedStruct(from: "John_F._Kennedy", to: "John F. Kennedy")], pages: ["5119376": PageStruct(pageid: 5119376, ns: 0, title: "John F. Kennedy", thumbnail: ThumbStruct(source: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/John_F._Kennedy%2C_White_House_color_photo_portrait.jpg/385px-John_F._Kennedy%2C_White_House_color_photo_portrait.jpg", width: 385, height: 500), pageimage: "John_F._Kennedy,_White_House_color_photo_portrait.jpg")]), batchcomplete: "")

...