//********************************************************************
//********************************************************************
//******************************* Data *******************************
//********************************************************************
//********************************************************************
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let webAddress = "https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJBfD1iPyLGGARiEmE6krSBf0&fields=name,rating,formatted_phone_number&key=AIzaSyAXGXGti9x6lICJBBsNt0JtpOuFOFbaFHo" //想要連結的網址
let webURL = URL(string: webAddress) //用網址產生URL
if let url = webURL{ //如果真的可以轉換成URL的話
DispatchQueue.global().async { //到背景執行佇列去下載
do{
//用這行程式碼下載,下載到的資料存在常數downloadedData中
let downloadedData = try Data(contentsOf: url)
let json = try JSONSerialization.jsonObject(with: downloadedData, options: [])
//整包資料是一個字典,所以轉型成字典
//print(json)
if let jsonDict = json as? [String:Any]
{
//用results這個key,拿到的資料是一個陣列,這個陣列裡面是一個字典
//如果result是陣列形式result[],則轉型時需要多加一組[]
//if let jsonArray = jsonDict["result"] as? [[String:Any]]
//如果result是字典形式而已,則轉型時不需要再多一組[]
if let jsonArray = jsonDict["result"] as? [String:Any]{
//找到陣列第零個成員,用name這個key,找到儲存名字的字典
//用first與last這兩個key,拿到相關的資料,取得全名。
//let jsonName = jsonArray[0]["name"] //如果result是陣列形式
let jsonName = jsonArray["name"]
print("地區:\(jsonName!)")
//找到陣列第零個成員,用age這個key,找到年紀
//let jsonRating = jsonArray[0]["rating"] //如果result是陣列形式
let jsonRating = jsonArray["rating"]
print("評分:\(jsonRating!)")
}
}
//下載到的資料可能是文字、html、JSON、XML,或是圖片等資料
/* 如果下載的資料是字串的話,請用下面的程式碼來處理
guard let downloadedString = NSString(
data: downloadedData,
encoding: String.Encoding.utf8.rawValue) else{
return
}
print(downloadedString) //downloadString是下載的字串
*/
//如果下載的資料是圖片的話,請用下面的程式碼處理
//用下載的資料產生UIImage
/*let downloadedImage = UIImage(data:downloadedData)
//到主佇列更新圖片
DispatchQueue.main.async {
self.myImageView.image = downloadedImage
}*/
}catch{
print("下載發生錯誤")
}
}
}
}
}
JSON Data形式(注意 result為字典非陣列)
-------------------------------------
有多層資料的JSON較複雜,需判斷是否有陣列或純粹是字典,再用let,as?[String:Any]的方式一層一層指定變數
有多層資料的JSON較複雜,需判斷是否有陣列或純粹是字典,再用let,as?[String:Any]的方式一層一層指定變數
//********************************************************************
//********************************************************************
//******************************* Data *******************************
//********************************************************************
//********************************************************************
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let webAddress = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=24.985175,121.440307&radius=5000&type=restaurant&keyword=%E9%A4%90%E5%BB%B3&next_page_token=%22CrQCKwEAADOqVIbft3Mibl9jTSjf0ge_b5rXgEulALABQCBIVGHQQzFaQlzfskH4tpftbORm-9InrFz9oKEB0k-1qkXNWHsmL15Coku53bGkh1D278azqkVzeLVSXPvGQ_2MSf6DEzrlB4twdWUDBiEVmQrwAmNV_pGxpAVWsCbUG5oTQ4qs60-DusN9enxwTqE2vw0Rob27rzEgA1os6pjlK7U6NfHUJqOK1TJuRZk_obGJtu5j4z-fqnfvh9uMsydz0L7-M2ayeQg54cBFMhCdMhr-AtOM0m48FlDSXedtgJgMigk9VMfr6kP0tzfEWMHEOdJwsjYGVCcYiKDEfhhDpQOg5-s8zjPZEnGONeUZjYUZrI_SJvD7_IFQodRMb3bpsFSSKqiZob-FrdJS3IGDQKrynBASEBZct2lbhWKn6yLnuN6z2G8aFEqpgD1FUac0aGRt62fnr3CRlxLP%22&key=AIzaSyAXGXGti9x6lICJBBsNt0JtpOuFOFbaFHo" //想要連結的網址
let webURL = URL(string: webAddress) //用網址產生URL
if let url = webURL{ //如果真的可以轉換成URL的話
DispatchQueue.global().async { //到背景執行佇列去下載
do{
//用這行程式碼下載,下載到的資料存在常數downloadedData中
let downloadedData = try Data(contentsOf: url)
let json = try JSONSerialization.jsonObject(with: downloadedData, options: [])
//整包資料是一個字典,所以轉型成字典
//print(json)
if let jsonDict = json as? [String:Any]
{
//用results這個key,拿到的資料是一個陣列,這個陣列裡面是一個字典
//如果result是陣列形式result[],則轉型時需要多加一組[]
//if let jsonArray = jsonDict["result"] as? [[String:Any]]
//如果result是字典形式而已,則轉型時不需要再多一組[]
if let jsonArray = jsonDict["results"] as? [[String:Any]]{
//找到陣列第零個成員,用name這個key,找到儲存名字的字典
//用first與last這兩個key,拿到相關的資料,取得全名。
//let jsonName = jsonArray[0]["name"] //如果result是陣列形式
if let geoArray = jsonArray[0]["geometry"] as?[String:Any]
{
//let jsonName = jsonArray[1]["geometry"]
let jsonName = geoArray["location"] as?[String:Any]
let jsonlat = jsonName?["lat"]
print("地區:\(jsonlat!)")
//找到陣列第零個成員,用age這個key,找到年紀
//let jsonRating = jsonArray[0]["rating"] //如果result是陣列形式
}
let jsonRating = jsonArray[1]["rating"]
print("評分:\(jsonRating!)")
}
}
//下載到的資料可能是文字、html、JSON、XML,或是圖片等資料
/* 如果下載的資料是字串的話,請用下面的程式碼來處理
guard let downloadedString = NSString(
data: downloadedData,
encoding: String.Encoding.utf8.rawValue) else{
return
}
print(downloadedString) //downloadString是下載的字串
*/
//如果下載的資料是圖片的話,請用下面的程式碼處理
//用下載的資料產生UIImage
/*let downloadedImage = UIImage(data:downloadedData)
//到主佇列更新圖片
DispatchQueue.main.async {
self.myImageView.image = downloadedImage
}*/
}catch{
print("下載發生錯誤")
}
}
}
}
}
留言
張貼留言