gpt4 book ai didi

json - Swift3 Json解析-如何访问相关字段

转载 作者:行者123 更新时间:2023-11-30 12:48:10 25 4
gpt4 key购买 nike

从 JSON 访问 Swift 3 所需的信息确实存在困难,这就是我所拥有的:

override func viewDidLoad()
{
super.viewDidLoad()

let url = URL(string: "http://api.brewerydb.com/v2/beers?key=e3bdce7d0a80584c784cdc4b02459add&name=budweiser")

URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print(error!)

}
else {

do {

let parsedData = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
// print(parsedData)


let dataLevel = parsedData["data"] as? NSDictionary


print(dataLevel)

let abv = dataLevel?["abv"] as? AnyObject
print(abv!)




} catch let error as NSError {
print(error)
}
}

}.resume()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

JSON 文件的链接位于代码中 - 为什么我的代码没有返回“数据”部分,以及如何检索啤酒“名称”、“abv”和“描述”?

最佳答案

当你处理 JSON 时,我认为使用以下工具会很有帮助: jsonformatter.curiousconcept.com或者 jsonlint.com这有助于我更好地理解结构以及我正在处理的数据类型。

如果你查看你的 json,你会注意到,正如 Eric Aya 所说,数据是一个数组而不是字典:

{
"currentPage": 1,
"numberOfPages": 1,
"totalResults": 1,
"data": [{
"id": "1P45iR",
"name": "Budweiser",
"nameDisplay": "Budweiser",
"description": "Known as \u201cThe King of Beers\u201d, Budweiser was first introduced by Adolphus Busch in 1876 and is brewed with the same high quality standards today. Budweiser is a medium-bodied, flavorful, crisp American-style lager, craft brewed with a blend of premium hop varieties, and associated with the core American values of celebration and optimism.",
"abv": "5",
"glasswareId": 5,
"srmId": 5,
"availableId": 1,
"styleId": 93,
"isOrganic": "N",
"labels": {
"icon": "https:\/\/s3.amazonaws.com\/brewerydbapi\/beer\/1P45iR\/upload_Y13vwL-icon.png",
"medium": "https:\/\/s3.amazonaws.com\/brewerydbapi\/beer\/1P45iR\/upload_Y13vwL-medium.png",
"large": "https:\/\/s3.amazonaws.com\/brewerydbapi\/beer\/1P45iR\/upload_Y13vwL-large.png"
},
"status": "verified",
"statusDisplay": "Verified",
"servingTemperature": "cold",
"servingTemperatureDisplay": "Cold - (4-7C\/39-45F)",
"createDate": "2012-01-03 02:42:55",
"updateDate": "2016-03-21 19:54:11",
"glass": {
"id": 5,
"name": "Pint",
"createDate": "2012-01-03 02:41:33"
},
"srm": {
"id": 5,
"name": "5",
"hex": "FBB123"
},
"available": {
"id": 1,
"name": "Year Round",
"description": "Available year round as a staple beer."
},
"style": {
"id": 93,
"categoryId": 8,
"category": {
"id": 8,
"name": "North American Lager",
"createDate": "2012-03-21 20:06:46"
},
"name": "American-Style Lager",
"shortName": "American Lager",
"description": "Light in body and very light to straw in color, American lagers are very clean and crisp and aggressively carbonated. Flavor components should b e subtle and complex, with no one ingredient dominating the others. Malt sweetness is light to mild. Corn, rice, or other grain or sugar adjuncts are often used. Hop bitterness, flavor and aroma are negligible to very light. Light fruity esters are acceptable. Chill haze and diacetyl should be absent.",
"ibuMin": "5",
"ibuMax": "13",
"abvMin": "3.8",
"abvMax": "5",
"srmMin": "2",
"srmMax": "4",
"ogMin": "1.04",
"fgMin": "1.006",
"fgMax": "1.01",
"createDate": "2012-03-21 20:06:46",
"updateDate": "2015-04-07 15:39:26"
}
}],
"status": "success"
}

以下代码有效,但我确信有更好的方法可以用更少的代码获取 abv:

 override func viewDidLoad()
{
super.viewDidLoad()

let url = URL(string: "http://api.brewerydb.com/v2/beers?key=e3bdce7d0a80584c784cdc4b02459add&name=budweiser")

URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print(error!)

}
else {

do {

let parsedData = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any]


let jsonArrayData = parsedData?["data"] as! NSArray
let data = jsonArrayData[0] as! NSDictionary
let abv = data["abv"]
print(abv)//Optional(5) in your case


} catch let error as NSError {
print(error)
}
}

}.resume()
}

关于json - Swift3 Json解析-如何访问相关字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com