gpt4 book ai didi

json - Swift JSON 解析 Wunderground

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

我是一个快速编程的初学者,我需要来自 JSON 的值,它看起来像这样:

{
"response": {
"version":"0.1",
"termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
"features": {
"astronomy": 1
}
}
, "moon_phase": {
"percentIlluminated":"23",
"ageOfMoon":"5",
"phaseofMoon":"Erstes Viertel",
"hemisphere":"North",
"current_time": {
"hour":"8",
"minute":"28"
},
"sunrise": {
"hour":"6",
"minute":"55"
},
"sunset": {
"hour":"19",
"minute":"50"
},
"moonrise": {
"hour":"9",
"minute":"50"
},
"moonset": {
"hour":"0",
"minute":"06"
}
},
"sun_phase": {
"sunrise": {
"hour":"6",
"minute":"55"
},
"sunset": {
"hour":"19",
"minute":"50"
}
}
}

我将从日落和日出开始的小时和分钟转换为变量!

我的代码:

 var sunriseHour: [String] = []
var sunriseMinute: [String] = []
var sunsetHour: [String] = []
var sunsetMinute: [String] = []

override func viewDidLoad() {
super.viewDidLoad()


let url=URL(string:"http://api.wunderground.com/api/dbd539bd631e/astronomy/lang:DL/q/DL/iphofen.json")
do {
let allData = try Data(contentsOf: url!)
let data = try JSONSerialization.jsonObject(with: allData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject]
if let arrJSON = data["moon_phase"] {


if let sunriseData = arrJSON["sunrise"]{



print(sunriseData)
}
if let sunsetData = arrJSON["sunset"]{

print(sunsetData)
}
}
print("hour: ",sunriseHour)
print("minute: ",sunriseMinute)
print("hour: ",sunsetHour)
print("minute: ",sunsetMinute)


}
catch {

}

}

我通过 print(sunriseData) 和 print(sunsetData) 得到了正确的数据:

Optional({ hour = 6; minute = 55; }) Optional({ hour = 19; minute = 50; }) hour: [] minute: [] hour: [] minute: []

如何在变量 sunriseHour、sunriseMinute、sunsetHour、sunsetMinute 中获取它。

感谢您的帮助..!

最佳答案

所有小时分钟值都是(单个)字符串而不是[String](数组)。

将所有变量声明为空字符串

var sunriseHour = ""
var sunriseMinute = ""
var sunsetHour = ""
var sunsetMinute = ""

然后不要从远程 URL 同步加载数据,始终使用异步方式:

       let url = URL(string:"http://api.wunderground.com/api/dbd539bd631e/astronomy/lang:DL/q/DL/iphofen.json")!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error!)
} else {
do {
guard let jsonData = try JSONSerialization.jsonObject(with:data!) as? [String:Any],
let moonPhase = jsonData["moon_phase"] as? [String:Any] else { return }

let sunrise = moonPhase["sunrise"] as! [String:String]
let sunset = moonPhase["sunset"] as! [String:String]

sunriseHour = sunrise["hour"]!
sunriseMinute = sunrise["minute"]!

sunsetHour = sunset["hour"]!
sunsetMinute = sunset["minute"]!

print("Sunrise - \(sunriseHour):\(sunriseMinute)"
print("Sunset - \(sunsetHour):\(sunsetMinute)"

} catch {
print(error)
}
}
}
task.resume()

日出日落的数据位于从moon_phase派生的字典中。所有值都被强制展开,因为日出和日落应该每天都存在;-)

PS:考虑定义更具描述性的变量名,arrJSON意义不大。

关于json - Swift JSON 解析 Wunderground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43156668/

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