我试图解析以下链接中的一些数据:https://feeds.divvybikes.com/stations/stations.json。
func getData() {
let url = URL(string:"https://feeds.divvybikes.com/stations/stations.json")
// Submit a request
let task = URLSession.shared.dataTask(with: url!) { (data,response,error) in
// print error if there is one
if error != nil {
print(error!)
self.alert(messageTitle: "Error", messageM: "An error occured")
return
} // end if
// if there is no error, fetch the json
if let content = data {
do {
let json = try JSONSerialization.jsonObject(with: content, options:JSONSerialization.ReadingOptions.mutableContainers ) as AnyObject
if let stationName = json["stationBeanList"] as? [String: AnyObject] {
for station in stationName{
if let lat1 = ["latitude"] as? CGFloat, let long1 = ["longitude"] as? CGFloat{
print(lat1,long1)
}
}
}
}
catch {
print(error)
self.alert(messageTitle: "Error", messageM: "An error occured")
}
}//end if
}//end task
task.resume()
//endqueue
}
我想从上面的链接中获取经度和纬度,并将它们绘制在嵌入swift的mapview中,但我似乎无法获得打印或存储的经度和纬度。任何帮助将不胜感激。
我在load()上调用getData函数 运行应用程序时,调试器中没有显示任何内容。
答案 0 :(得分:0)
在查看完代码之后,我发现你在网络服务的调用中犯了一个很小的错误。
如果您想获取值,则需要在for loop
stationName
之后按照此处进行操作。
以下是示例摘要以获得更多说明。
for station in stationName{
print(station["latitude"] as! Double)
print(station["longitude"] as! Double)
}
希望这可以帮助你:)
答案 1 :(得分:0)
在代码中,您将纬度和经度视为String。但它的值不是String类型。
所以永远不会调用print(lat1,long1)
。
解决方案:将其视为CGFloat而不是String,它会起作用我认为是
答案 2 :(得分:0)
让url =网址(字符串:" https://feeds.divvybikes.com/stations/stations.json")
// Submit a request to get the JASON data
let task = URLSession.shared.dataTask(with: url!) { (data,response,error) in
// if there is an error, print the error and do not continue
if error != nil {
print(error!)
self.alert(messageTitle: "Error", messageM: "An error occured")
return
} // end if
// if there is no error, fetch the json formatted content
if let content = data {
do {
let jsonObject = try JSONSerialization.jsonObject(with: content, options: [] ) as AnyObject
if let JSON = jsonObject["stationBeanList"] as? [[String:AnyObject]] {
for stationInfo in JSON {
if let longitude = stationInfo["longitude"] as? Float64, let latitude = stationInfo["latitude"] as? Float64 {
print(longitude,latitude)
// self.objects.append(stationInfo(latitude:latitude,longitude:longitude))
}//end if
}//end if let
}//end do
}//end do
catch {
print(error)
self.alert(messageTitle: "Error", messageM: "An error occured")
}
}//end if
}//end task
task.resume()
}//endqueue
}
答案 3 :(得分:0)
有很多问题。
if (x > 5) {
} else if (x > 50) {
} else {
}
的值是数组而非字典。stationBeanList
在Swift中完全没用,省略了参数。.mutableContainers
,数组为[String:Any]
。[[String:Any]]
,从不Any
。AnyObject
。Double
。Any