JSONDecoder 介绍 Day 16

JSONDecoder

将抓下来的资讯透过JSONDecoder这个将收集到的资讯进行使用

  • 建立需要使用的资料结构
  • 建立JSONDecoder实例
  • 利用JSONDecoder的decode func去解析所需要的文件,并储存在相应的资料结构内

下面做个简单的示范:

// 假设今天有个struct名为Price
struct Price:Codable{
	var apple:Int
	var banana:Int
	var pineapple:Int
}

// 本地端建立一个json档
let json = """ 
	{
		"apple":10,
		"banana":20,
		"pineapple":30
	}
""".data(using: .utf8)!

// 建立一个JSONDecoder实例
let decoder = JSONDecoder()

// 透过解析json档,将资料储存在自定义的struct中
let price = try decoder.decode(Product.self,from:json)

// 印出10
print(price.apple)

在Decode的时候要注意的点:

需要注意JSON里面是{}还是[]

使用[]符号的是Array

使用{}符号的是物件

这两种在结构上存在差异:

struct decodeAll:Codable{
	// 代表里面是[]阵列,还有东西在里面
	let basket:[Ball]
	// 代表是物件,直接使用里面的名字即可
	let basketball:String
}

// []阵列里面的key-value搭配
struct Ball:Codable{
	let Ballname:String
}

另外有个例子:

"Basket":["BasketBall"]
使用JSONEditorOnline看到的会是
Basket[1]
[0:"BasketBall"]

这样要怎麽解决,通常会使用key值作为decode媒介,但是这个没有key
这边会使用
struct decodeBasket:Codable{
	let Basket:[String]
}
直接将里面的物件,用所属的属性decode

应用上会先使用URLSession进行网路连结

  • 透过URLSession与网路做沟通
  • 将传回来的资料进行 Decode的动作,得到想要的资料
let url = URL(string:"http:.....")
let session = URLSession.shared
// 
let task = session.dataTask(with:URLRequest(url:url!)){(data,res,error) in 
	// 会回传(data,res,error)资料,下面的函式都是基於这三个回传资料进行
	
	if error != nil{
		print(error!)
		return
	}
	let decoder = JSONDecoder()
	// 使用DecumentData作为decode的结构,这边省略写下DocumentData的详细结构
	guard document = try decoder.decode(DocumentData.self,from:data!)else{
		print("ERROR")
		return
		}
}
task.resume()

<<:  Day6 Sideproject(作品集) from 0 to 1 -定义功能

>>:  【後转前要多久】# Day05 HTML - 语意标签 & 引用CSS

Day-26 修改Icon

昨日提及如何於程序内显示图片, 而今天要介绍的内容同样与图片有关, 那就是如何修改App的Icon。...

JS [笔记] debounce、throttle

完全参考,此处为整理笔记 [有趣面试题] 网页效能问题改善之 Debounce & Thro...

Java笔记:观念厘清-stack及heap的差异

本篇为记录不同的Java资料型态在记忆体中的变化情形,参考JVM 的 Stack 和 Heap并重点...

[Flutter ] Free fake API 为资料库,以 FutureBuilder + http 抓取

程序版本: Flutter 2.2.1 使用JSONPlaceholder为 Free fake A...

[Day27] 实战 - 撰写均线金三角交叉的策略

影片在这里 分类:选股 型态 重点整理 金三角交叉:5 日均线先向上突破 10 日均线後再突破 20...