์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒฝ๋ ๋ฐ์ดํฐ ํ์์ ๋๋ค. JSON์ ํฌ๊ฒ ๋ ๊ฐ์ง ํํ๋ก ๋๋๋ค.
JSON์ "key-value"๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ค์ ์งํฉ์ด๋ค.
key์ value ์ฌ์ด๋ฅผ : ์ ์ด์ฉํ์ฌ ๊ตฌ๋ถํ๋ ํ์์ ์ทจํ๋ค.
key๊ฐ๋ง ์๊ณ ์์ผ๋ฉด value๋ฅผ ์ถ์ถํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๊ฐ Key๋ ๊ณ ์ ํ ๋ฌธ์์ด์ด๊ณ , ์ด์ ๋์ํ๋ Value๋ ๋ฌธ์์ด, ์ซ์, ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฑ ๋ค์ํ ํ์ ์ด ๋ ์ ์์ต๋๋ค.
JSON Object๋ {} ์ค๊ดํธ๋ก ๊ฐ์ธ์ง Key-Value ์์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฒด๋ค.
๊ฐ Key๋ ๊ณ ์ ํ ๋ฌธ์์ด์ด๊ณ , ์ด์ ๋์ํ๋ Value๋ ๋ฌธ์์ด, ์ซ์, ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฑ ๋ค์ํ ํ์ ์ด ๋ ์ ์๋ค.
key๋ก ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ์์๊ฐ ๊ตฌ๋ถ๋์ง ์๋๋ค
//์๋ฒ์์ ๋ด๋ ค์ค๋ ์ ๋ณด
{
"name": "John",
"age": 30,
"isEmployed": true,
"address": {
"street": "123 Main St",
"city": "New York"
}
}
์์ JSON Object๋ John์ด๋ผ๋ ์ฌ๋์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋ค.
์ฌ๊ธฐ์ address๋ ๋๋ค๋ฅธ JSON Object๋ก street๊ณผ city๋ฅผ key๋ก ๊ฐ์ง๊ณ ์๋ค.
//๋ชจ๋ธ๋ง
struct Person: Codable {
let name: String
let age: Int
let isEmployed: Bool
let address: Address
}
struct Address: Codable {
let street: String
let city: String
}
Swift์์ ์์ ๊ฐ์ด ๋ชจ๋ธ๋งํ ์ ์๋ค.
//๋์ฝ๋ฉ
let decoder = JSONDecoder()
do {
let person = try decoder.decode(Person.self, from: jsonData)
print(person.name) // "John"
print(person.address.city) // "New York"
} catch {
print("Decoding failed: \(error)")
}
๋์ฝ๋ฉ ์ ์์ ๊ฐ์ด Person๊ฐ์ฒด๋ก ๋์ฝ๋ฉ ํ๋ค.
JSON Array๋ [ ] ๋๊ดํธ๋ก ๊ฐ์ธ์ง ์์๋ค์ ๋ฐฐ์ด์ด๋ค.
๊ฐ ์์๋ JSON Object, ๋ฌธ์์ด, ์ซ์ ๋ฑ ๋ค์ํ ํ์ ์ผ ์ ์๋ค.
JSON Array๋ ๋ณดํต ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์กํ ๋ ์ฌ์ฉ๋๋ค.
index๋ก ์ ๊ทผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ๊ตฌ๋ถ๋๋ค.
//์๋ฒ์์ ๋ด๋ ค์ค๋ ์ ๋ณด
[
{
"name": "John",
"age": 30,
"isEmployed": true
},
{
"name": "Swift",
"age": 25,
"isEmployed": false
}
]
Jhon๊ณผ Swift๋ผ๋ ์ฌ๋๋ค์ ๋ํ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
//๋ชจ๋ธ๋ง
struct Person: Codable {
let name: String
let age: Int
let isEmployed: Bool
}
//๋์ฝ๋ฉ
do {
let people = try decoder.decode([Person].self, from: jsonArrayData)
print(people[0].name) // "John"
print(people[1].name) // "Swift"
} catch {
print("Decoding failed: \(error)")
}
JSON Object๋ Key-Value ์์ผ๋ก ๊ตฌ์ฑ๋ ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ฐ์ดํฐ์ ์์ฑ์ ์ค๋ช ํ๋ค.
JSON Array๋ ์ฌ๋ฌ ๊ฐ์ JSON Object ๋๋ ๋ค๋ฅธ ํ์ ์ ์์๋ค์ ๋ฐฐ์ด๋ก ๋ฌถ์ด ๋ํ๋ธ๋ค.
{
//๐
"status": "success",
//๐
"data": {
"totalResults": 2,
"articles": [
{
"title": "Swift 5.5 Released",
"author": "John Appleseed",
"url": "https://example.com/swift-5-5-released"
},
{
"title": "Understanding Async/Await in Swift",
"author": "Jane Doe",
"url": "https://example.com/understanding-async-await"
}
]
},
//๐
"meta": {
"requestTime": "2024-08-20T10:20:30Z"
}
}
[ ๊ตฌ์กฐ ]
//๋ชจ๋ธ๋ง
struct ApiResponse: Codable {
let status: String
let data: ArticleData
let meta: Meta
}
struct ArticleData: Codable {
let totalResults: Int
let articles: [Article] // JSON Array๋ฅผ ๋ด๊ธฐ ์ํด [Article] ๋ฐฐ์ด ์ฌ์ฉ
}
struct Article: Codable {
let title: String
let author: String
let url: String
}
struct Meta: Codable {
let requestTime: String
}
[ ๊ตฌ์กฐ ]
[Firebase] iOS ํ์ด์ด๋ฒ ์ด์ค Xcode์ ์ฐ๊ฒฐํ๊ธฐ (0) | 2024.08.25 |
---|---|
endpoint ์ฌ์ฉ (0) | 2024.08.23 |
Netflix ํด๋ก ์ฝ๋ฉ URLSession ๋ฆฌํฉํ ๋งํด๋ณด๊ธฐ/ Endpint (0) | 2024.08.10 |
DispatchQueue.global().async์ DispatchQueue.main.async (0) | 2024.08.03 |
[URLSession] completion(nil) ๋์ Result ํ์ ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2024.08.02 |