需要在SWIFT中解析Wikipedia JSON API的帮助

时间:2019-01-29 07:21:39

标签: json swift api uiimageview wikipedia-api

以下是WIKI页面的json。 (格式可能有误,因此下面是一个链接,更容易看到:https://en.wikipedia.org/w/api.php?action=query&prop=pageimages&titles=John_F._Kennedy&pithumbsize=500

  

{       “ batchcomplete”:“”,       “查询”:{           “规范化”:[               {                   “来自”:“ John_F._Kennedy”,                   “致”:“约翰·肯尼迪”               }           ],           “页面”:{               “ 5119376”:{                   “ pageid”:5119376,                   “ ns”:0,                   “ title”:“约翰·肯尼迪”,                   “缩略图”:{                       “源”:“ 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”,                       “宽度”:385,                       “身高”:500                   },                   “ pageimage”:“ John_F._Kennedy,_White_House_photo_portrait,_looking_up.jpg”               }           }       }   }

我制作了结构以表示json键,但是我无法弄清楚我可以写什么结构或var来表示数字5119376,这显然是一个对象。所有其他键值都是字符串,并且不会更改。但是这个键很奇怪,因为它是一个整数,并且在Wiki页面之间变化。所以我不知道该键的名字是什么,因为它应该是数字,并且每页都会改变。

我尝试打印出整个对象,以查看其在控制台中的外观:

  

{   WikiStruct(查询:quote_project.QueryStruct(页面:可选(quote_project.PageStruct(pageid:nil,ns:nil,标题:nil,缩略图:nil,pageimage:nil))),批处理完成:Optional(“”))   }

因此计算机得到了“ batchcomplete是一个空字符串”,并且还拾取了标准化的内容,但是它说怪异的5119376对象中的所有内容均为零。我的最终目标是访问提供Wiki页面主要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 :(得分:0)

今天有同样的问题。设法解决它。基本上,嵌套在页面下的数据是一个带键对象,键为5119376。要对此进行解析,只需将QueryStruct中的pages变量更改为字典。像这样:

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: "")