์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

JSONObject์™€ JSONArray

๐ŸŽ iOS/Network

by AHN.Jihyeon 2024. 8. 20. 14:36

๋ณธ๋ฌธ

JSON(JavaScript Object Notation) 

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ํ˜•์‹์ž…๋‹ˆ๋‹ค. JSON์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋‚˜๋‰œ๋‹ค.

 

JSON์€ "key-value"๊ฐ€ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.

 

key์™€ value ์‚ฌ์ด๋ฅผ : ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•˜๋Š” ํ˜•์‹์„ ์ทจํ•œ๋‹ค.

key๊ฐ’๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด value๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

๊ฐ Key๋Š” ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด์ด๊ณ , ์ด์— ๋Œ€์‘ํ•˜๋Š” Value๋Š” ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ฐฐ์—ด, ๊ฐ์ฒด ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


JSONObject

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๊ฐ์ฒด๋กœ ๋””์ฝ”๋”ฉ ํ•œ๋‹ค. 

 


JSONArray

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์™€ JSON Array์˜ ์ฐจ์ด์ 

JSON Object๋Š” Key-Value ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•œ๋‹ค.

JSON Array๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ JSON Object ๋˜๋Š” ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์š”์†Œ๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฌถ์–ด ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

 

 


JSON Object์™€ JSON Array๊ฐ€ ํ˜ผํ•ฉ๋œ ๊ตฌ์กฐ

{
  //๐ŸŒŸ
  "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"
  }
}

 

[ ๊ตฌ์กฐ ] 

  • ์ตœ์ƒ์œ„๋Š” JSON Object(status, data, meta ํ‚ค ํฌํ•จ).
  • data ํ‚ค๋Š” JSON Object๋กœ, ๋‚ด๋ถ€์— totalResults๋ผ๋Š” Int์™€ articles๋ผ๋Š” JSON Array๋ฅผ ํฌํ•จ.
  • articles Array๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ JSON Object(๊ฐ ๊ธฐ์‚ฌ์˜ ์ •๋ณด)๋ฅผ ํฌํ•จ.
  • meta ํ‚ค๋Š” JSON Object๋กœ, ์š”์ฒญ ์‹œ๊ฐ„(requestTime)์„ ํฌํ•จ.

 

//๋ชจ๋ธ๋ง
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
}

 

 

 


KAKAO API ๋ถ„์„ํ•ด๋ณด๊ธฐ

[ ๊ตฌ์กฐ ] 

  • ์ตœ์ƒ์œ„๋Š” JSON Object(documents, meta ํ‚ค ํฌํ•จ).
  • documents ํ‚ค๋Š” JSON Array๋กœ, ๋‚ด๋ถ€์— document๋ผ๋Š” JSON Object๋ฅผ ํฌํ•จ.
  • address๋Š” JSON Object๋กœ ๋‚ด๋ถ€์— key-valure๋ฅผ ํฌํ•จ
  • meta ํ‚ค๋Š” JSON Object

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ