斯威夫特解析JSON数据从Guidebox API
我试图解析使用雨燕从Guidebox JSON数据。该数据的一个例子是这样的:斯威夫特解析JSON数据从Guidebox API
{
"results": [
{
"id": 14673,
"title": "The Golden Girls",
"alternate_titles": [
"Golden Palace"
],
"container_show": 0,
"first_aired": "1985-09-14",
"imdb_id": "tt0088526",
"tvdb": 71292,
"themoviedb": 1678,
"freebase": "\/m\/01fszq",
"wikipedia_id": 217200,
"tvrage": {
"tvrage_id": 5820,
"link": "http:\/\/www.tvrage.com\/shows\/id-5820"
},
"artwork_208x117": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_small\/14673-9570342022-208x117-show-thumbnail.jpg",
"artwork_304x171": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_medium\/14673-3759246217-304x171-show-thumbnail.jpg",
"artwork_448x252": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_large\/14673-2249565586-448x252-show-thumbnail.jpg",
"artwork_608x342": "http:\/\/static-api.guidebox.com\/120214\/thumbnails_xlarge\/14673-6064109057-608x342-show-thumbnail.jpg"
}
],
"total_results": 1,
"development_api_key": "You are currently using a temporary development API key. This API key is for testing only. You have used 57 of 250 available calls. Please see the API docs (http:\/\/api.guidebox.com\/apidocs) for additional information or to generate a production API key."
}
看来,我的情况,使用数据的最简单的方法是将其转换为[字符串:任何],因为我真正需要的是“ID “,”标题“和艺术品价值。然而,我所使用的所有(无数)方法都失败了,因为“alternate_titles”被解析为一个NSArray,这使得一切变得更加困难。 到目前为止,我已经试过这种方法的变化:
do {
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any]
let datafinal = jsonResult["results"] as! [String: Any]
//Fails around here usually, when the data is converted to [String: Any] or [Any:Any] because of the array.
let title = datafinal["title"]
} catch {
print("JSON Preocessing failed")
}
我也用了SwiftyJSON库尝试将数据更易于阅读JSON转换,但拉字典的方法,由它总是失败(我猜也是由于结构)。任何人都有一个简单的方法从URL中获取JSON数据并轻松访问“结果”中的值?任何帮助深表感谢!
试试这个
do {
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any]
let datafinal = jsonResult["results"] as! NSArary
let title = datafinal[0].value(forKey: "title")
print("\(title)")
} catch {
print("JSON Preocessing failed")
}
可以将描述添加到您的解决方案中吗? – dirtydanee
@dirtydanee我的理解,他只想从只有一个索引数组得到Title,这是结果。下一步他在'index 0'处有一个字典在数组中,我正在为关键标题'let title = datafinal [0] .value(forKey:“title”)'获取值。对不起,我的英语不是很好,通过你的答案也很好。 :) –
您只需要将结果作为array
进行访问,并将array
的first element
取为Dictionary
。
在未来,here是伟大的工具,使用的是什么,你可以更方便地检查数据的结构,它可能像揭示了这个问题快。
do {
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: Any]
guard let results = jsonResult["results"] as? [Any], let resultDictinary = results.first as? [String: Any] else {
fatalError("Data structure invalid")
}
let title = resultDictinary["title"]
} catch {
print("JSON Preocessing failed")
}
我相信这会工作,但有大约后卫声明编译一些混乱以及它是如何建立(我觉得两个都让混乱的话)。不过谢谢你!另外,我喜欢这个工具,我的问题主要是关于如何访问它。 –
啊,是的,这是有效的! –
你可以分享你的努力? –
试试这个'千万{ 让jsonResult =尝试JSONSerialization.jsonObject(附:数据!选择:JSONSerialization.ReadingOptions.mutableContainers)为! [String:Any] let datafinal = jsonResult [“results”] as! NSArary //当数据由于数组转换为[String:Any]或[Any:Any]时,通常会在这里失效。 令标题= datafinal [0]。价值(forKey: “标题”) 打印( “\(标题)”) }赶上{ 打印( “JSON Preocessing失败”) }' –
创建模型类和解析它使用对象映射器。 –