1,JSON是什么
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫犬辰。同時也易于機(jī)器解析和生成嗦篱。
JSON建構(gòu)于兩種結(jié)構(gòu):
“名稱/值”對的集合(A collection of name/value pairs)。
不同的語言中幌缝,它被理解為對象(object)灸促,紀(jì)錄(record),結(jié)構(gòu)(struct)狮腿,字典(dictionary)腿宰,哈希表(hash table),有鍵列表(keyed list)缘厢,或者關(guān)聯(lián)數(shù)組 (associative array)吃度。
值的有序列表(An ordered list of values)。在大部分語言中贴硫,它被理解為數(shù)組(array)椿每。
這些都是常見的數(shù)據(jù)結(jié)構(gòu)。事實(shí)上大部分現(xiàn)代計(jì)算機(jī)語言都以某種形式支持它們英遭。這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能间护。
JSON具有以下這些形式:
{
? "firstName": "John",
? "lastName": "Smith",
? "isAlive": true,
? "age": 27,
? "address": {
? ? "streetAddress": "21 2nd Street",
? ? "city": "New York",
? ? "state": "NY",
? ? "postalCode": "10021-3100"
? },
? "phoneNumbers": [
? ? {
? ? ? "type": "home",
? ? ? "number": "212 555-1234"
? ? },
? ? {
? ? ? "type": "office",
? ? ? "number": "646 555-4567"
? ? },
? ? {
? ? ? "type": "mobile",
? ? ? "number": "123 456-7890"
? ? }
? ],
? "children": [],
? "spouse": null
}
總之,json廣泛應(yīng)用于多種語言之間的交互挖诸,如今所有語言都支持json格式汁尺,廣泛用于通過Internet發(fā)送數(shù)據(jù)。JSON格式包括字典和數(shù)組多律。
ios如何讀json
1
打開Xcode并創(chuàng)建一個新的Single View應(yīng)用程序痴突。
2
IOSJSONTutorial,然后使用您的常規(guī)值填寫組織名稱和組織標(biāo)識符狼荞。輸入Swift作為語言辽装,然后選擇Next。
3
轉(zhuǎn)到? 故事板相味。將4個標(biāo)簽添加到故事板拾积。根據(jù)以下屏幕截圖定位和命名標(biāo)簽。
4
打開Assistant Editor并確保ViewController.swift文件可見。按住Ctrl鍵并從右側(cè)日期標(biāo)簽拖動到ViewController類并創(chuàng)建以下Outlet拓巧。
?5
按Ctrl +從右側(cè)時間標(biāo)簽拖動到ViewController類并創(chuàng)建以下Outlet斯碌。
JSONTest.com是一個利用JavaScript Object Notation(JSON)的服務(wù)測試平臺。在這種情況下玲销,我們使用日期服務(wù)输拇。這將返回當(dāng)前日期和時間。
1,首先你需要創(chuàng)建一個結(jié)構(gòu)贤斜,該結(jié)構(gòu)將保存從JSON對象中檢索的日期和時間值策吠。
struct JSONTest: Codable {
? ? let date: String
? ? let time: String
}
2,修改viewDidLoad方法
override func viewDidLoad() {
? ? super.viewDidLoad()
? ? // 1 url解析地址
? ? let urlString = "http://date.jsontest.com"
? ? guard let url = URL(string: urlString) else { return }
? ? // 2 該dataTask(配:completionHandler :)方法創(chuàng)建在URL中檢索內(nèi)容的任務(wù)
? ? URLSession.shared.dataTask(with: url) { (data, response, error) in
? ? ? ? if error != nil {
? ? ? ? ? ? print(error!.localizedDescription)
? ? ? ? }
? ? ? ? guard let data = data else { return }
? ? ? ? do {
? ? ? ? ? ? // 3
? ? ? ? ? ? //對JSON對象的解碼
? ? ? ? ? ? let JSONData = try JSONDecoder().decode(JSONTest.self, from: data)
? ? ? ? ? ? // 4
? ? ? ? ? ? //JSON對象的日期和時間值將分配給標(biāo)簽
? ? ? ? ? ? DispatchQueue.main.async {
? ? ? ? ? ? ? ? self.dateLabel.text = JSONData.date
? ? ? ? ? ? ? ? self.timeLabel.text = JSONData.time
? ? ? ? ? ? }
? ? ? ? } catch let jsonError {
? ? ? ? ? ? print(jsonError)
? ? ? ? }
? ? ? ? // 5 恢復(fù)方法開始web請求。
? ? ? ? }.resume()
}
結(jié)果如下: