πŸ’Ύμœ λ‹ˆν‹° - JSON 파일둜 κ²Œμž„ μ €μž₯ν•˜κΈ° 1-1 (JSON νŒŒμΌμ΄λž€?)

JP KimΒ·2024λ…„ 11μ›” 16일

μœ λ‹ˆνŒ…

λͺ©λ‘ 보기
3/5

κ²Œμž„μ„ ν•˜λ‹€λ³΄λ©΄ μ–Έμ  κ°„ κ²Œμž„μ„ μ’…λ£Œμ‹œμΌœμ•Ό ν•œλ‹€. 이럴 λ•Œ μ €μž₯κΈ°λŠ₯이 μ—†λ‹€λ©΄ μœ μ € μž…μž₯μ—μ„œ 많이 λ‚œμ²˜ν•  것이닀.
μœ λ‹ˆν‹°μ—μ„œ 보톡 μ €μž₯ κΈ°λŠ₯을 κ΅¬ν˜„ν•  땐, PlayerPrefs, JSON 파일 등을 μ‚¬μš©ν•œλ‹€.
μ΄λ²ˆμ—” JSON 파일둜 κ²Œμž„ μ €μž₯ κΈ°λŠ₯을 μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  수 μžˆμ„μ§€ μ•Œμ•„λ³΄μž.


JSONμ΄λž€?

μ €μž₯ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° 전에 λ¨Όμ € JSON에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.
JSON으둜 μ €μž₯ν•œλ‹€λŠ”λ° JSON이 λ­”μ§€ λͺ¨λ₯΄λ©΄ λ­”κ°€ μ΄μƒν•˜μ§€ μ•Šμ€κ°€.

JSON은 JavaScript Object Notation의 μ•½μžλ‘œ 데이터 μ €μž₯κ³Ό κ΅ν™˜μ„ μˆ˜μ›”ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ 양식이닀. 기쑴에 μ“°μ΄λ˜ XML에 λΉ„ν•΄ ꡬ쑰가 λ‹¨μˆœν•˜κ³  κ°€λ²Όμ›Œ 자주 μ‚¬μš©λœλ‹€.

1. JSON의 ꡬ쑰

JSON은 객체(Object)둜 이루어져 μžˆμ„ μˆ˜λ„ 있고, λ°°μ—΄(Array)둜 이루어져 μžˆμ„ μˆ˜λ„ μžˆλ‹€. μ„€λͺ…ν•˜κΈ°μ— μ•žμ„œ κ°„λ‹¨νžˆ 비ꡐ해보면,


객체

  • μ€‘κ΄„ν˜Έ {} 둜 감싸며, ν‚€(key) - κ°’(value) 쌍으둜 데이터λ₯Ό μ €μž₯ν•œλ‹€.
  • λ‹€μ–‘ν•œ μ†μ„±μ˜ 데이터λ₯Ό μ €μž₯ν•  λ•Œ μœ μš©ν•˜λ‹€.
    ex) ν”Œλ ˆμ΄μ–΄ 레벨, μ§„ν–‰ 상황, μ„€μ • 정보 λ“±

기본적인 ꡬ쑰

{ key : value }

μ˜ˆμ‹œ

{
  "λ„μ‹œ": "μ„œμšΈ",
  "인ꡬ": 10000000,
  "μ§€μ—­": ["은평ꡬ", "μ˜λ“±ν¬κ΅¬", "마포ꡬ"]
}

λ°°μ—΄

  • λŒ€κ΄„ν˜Έ []둜 감싸며, κ°’(value)λ“€μ˜ λͺ©λ‘μ„ μ €μž₯ν•œλ‹€.
  • μˆœμ„œκ°€ μ‘΄μž¬ν•˜κ±°λ‚˜ λΉ„μŠ·ν•œ μ’…λ₯˜μ˜ 데이터λ₯Ό μ €μž₯ν•  λ•Œ μœ μš©ν•˜λ‹€.
    ex) μ•„μ΄ν…œ 리슀트, 배열에 κΈ°λ°˜ν•œ 데이터 λ“±

기본적인 ꡬ쑰

[value1, value2, value3]

μ˜ˆμ‹œ

[
  {"μƒν’ˆ": "λ…ΈνŠΈλΆ", "가격": 1500000},
  {"μƒν’ˆ": "슀마트폰", "가격": 800000},
  {"μƒν’ˆ": "νƒœλΈ”λ¦Ώ", "가격": 600000}
]

λ‹€μŒ μ˜ˆμ‹œλ‘œ μ’€ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄μž.

{
  "이름": "홍길동",
  "λ‚˜μ΄": 30,
  "μ£Όμ†Œ": {
    "λ„μ‹œ": "μ„œμšΈ",
    "ꡬ": "강남ꡬ"
  },
  "μ·¨λ―Έ": ["λ…μ„œ", "λ“±μ‚°", "μŒμ•… 감상"]
}
  • μœ„μ˜ μ˜ˆμ‹œλŠ” JSON 객체둜 이름, λ‚˜μ΄, μ£Όμ†Œ, 취미의 ν‚€(key)와 이에 ν•΄λ‹Ήν•˜λŠ” 값듀이 ν¬ν•¨λ˜μ–΄ μžˆλ‹€. 각 λ°μ΄ν„°λŠ” μ‰Όν‘œ,둜 κ΅¬λΆ„λœλ‹€.
  • μ—¬κΈ°μ„œ μ£Όμ†ŒλŠ” κ°’μœΌλ‘œ 또 λ‹€λ₯Έ 객체λ₯Ό κ°€μ§€λ©°, κ·Έ κ°μ²΄λŠ” λ„μ‹œ, ꡬ의 킀와 이에 ν•΄λ‹Ήν•˜λŠ” 값이 μ €μž₯λ˜μ–΄ μžˆλ‹€.
  • 그리고 취미의 κ°’μœΌλ‘œλŠ” 배열이 ν• λ‹Ήλ˜μ–΄ μžˆλ‹€.

μ£Όμ†Œ 킀에 ν• λ‹Ήλœ κ°’(객체)

{
    "λ„μ‹œ": "μ„œμšΈ",
    "ꡬ": "강남ꡬ"
}

μ·¨λ―Έ 킀에 ν• λ‹Ήλœ κ°’(λ°°μ—΄)

["λ…μ„œ", "λ“±μ‚°", "μŒμ•… 감상"]

κ°‘μžκΈ° λ­”κ°€ λ³΅μž‘ν•΄ λ³΄μ΄λŠ” μ½”λ“œμ˜ ꡬ쑰λ₯Ό λœ―μ–΄λ³΄λ‹ˆ λ­”κ°€ ν—·κ°ˆλ¦΄ μˆ˜λ„ μžˆλ‹€.
κ·Έλž˜μ„œ JSONμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ 데이터 νƒ€μž…μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ©΄μ„œ λ³΅μŠ΅ν•΄λ³΄μž.


2. JSONμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ 데이터 νƒ€μž…

JSON λ‚΄μ—μ„œ ν‘œν˜„ν•  수 μžˆλŠ” 데이터 νƒ€μž…μ€ λ‹€μŒ 6κ°œκ°€ μžˆλ‹€.

  • λ¬Έμžμ—΄ (String): "ν…μŠ€νŠΈ"
  • 숫자 (Number): μ •μˆ˜ex) -1, 0, 1, λ“±...λ‚˜ μ‹€μˆ˜ex) 3.141592, λ“±...
  • 객체 (Object): { "ν‚€": "κ°’" }
  • λ°°μ—΄ (Array): [κ°’1, κ°’2, ...]
  • λΆˆλ¦¬μ–Έ (Boolean): true λ˜λŠ” false
  • 널 (Null): null

이λ₯Ό 보고 λ‹€μŒ μ˜ˆμ‹œμ™€ ν•¨κ»˜ λ‹€μ‹œ μžμ„Ένžˆ μ΄ν•΄ν•΄λ³΄μž.

{
  "name": "홍길동",                
  "age": 28,                      
  "height": 175.5,                
  "isMember": true,               
  "address": {                    
    "city": "μ„œμšΈ",
    "district": "강남ꡬ",
    "zipcode": null               
  },
  "hobbies": ["λ…μ„œ", "λ“±μ‚°", "μ˜ν™” 감상"]
}
  1. λ¬Έμžμ—΄ (String)
    • μ˜ˆμ‹œ ν•„λ“œ: "name": "홍길동", "city": "μ„œμšΈ", "district": "강남ꡬ"
    • ν…μŠ€νŠΈ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λœλ‹€. λ¬Έμžμ—΄μ€ 항상 ν°λ”°μ˜΄ν‘œ(" ")둜 κ°μ‹Έμ„œ μ¨μ•Όν•œλ‹€.
  2. 숫자 (Number)
    • μ˜ˆμ‹œ ν•„λ“œ: "age": 28, "height": 175.5
    • μ •μˆ˜μ™€ μ‹€μˆ˜, λͺ¨λ‘λ₯Ό μ§€μΉ­ν•œλ‹€. JSONμ—μ„œλŠ” λ³„λ„μ˜ μ •μˆ˜ νƒ€μž…κ³Ό μ‹€μˆ˜ νƒ€μž…μœΌλ‘œ κ΅¬λΆ„ν•˜μ§€ μ•ŠλŠ”λ‹€.
  3. 객체 (Object)
    • μ˜ˆμ‹œ ν•„λ“œ: "address": { ... }
    • μ€‘κ΄„ν˜Έ{}둜 감싸여 있으며, ν‚€-κ°’ 쌍으둜 κ΅¬μ„±λœλ‹€. λ³΅μž‘ν•œ 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
  4. λ°°μ—΄ (Array)
    • μ˜ˆμ‹œ ν•„λ“œ: "hobbies": ["λ…μ„œ", "λ“±μ‚°", "μ˜ν™” 감상"]
    • λŒ€κ΄„ν˜Έ[]둜 감싸여 있으며, κ°’λ“€μ˜ μˆœμ„œκ°€ μžˆλŠ” λͺ©λ‘μœΌλ‘œ κ΅¬μ„±λœλ‹€. λ™μΌν•œ νƒ€μž…μ˜ λ°μ΄ν„°λ‚˜ λ‹€μ–‘ν•œ νƒ€μž…μ˜ 데이터λ₯Ό 포함할 수 μžˆλ‹€.
  5. λΆˆλ¦¬μ–Έ (Boolean)
    • μ˜ˆμ‹œ ν•„λ“œ: "isMember": true
    • μ°Έ(true) λ˜λŠ” κ±°μ§“(false) 값을 κ°€μ§„λ‹€.
  6. 널 (Null)
    • μ˜ˆμ‹œ ν•„λ“œ: "zipcode": null
    • 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚Έλ‹€. 데이터가 μ—†κ±°λ‚˜ 값이 아직 ν• λ‹Ήλ˜μ§€ μ•Šμ€ κ²½μš°μ— μ‚¬μš©ν•œλ‹€.

데이터 νƒ€μž…μ„ ν™œμš©ν•˜λ©΄ μ•„λž˜μ™€ 같이 λ³΅μž‘ν•œ ꡬ쑰도 ν‘œν˜„ κ°€λŠ₯ν•˜λ‹€.

{
  "player": {
    "name": "κΉ€μ² μˆ˜",
    "stats": {
      "level": 15,
      "experience": 2450.75,
      "isPremium": false
    },
    "inventory": [
      {
        "item": "κ²€",
        "quantity": 1,
        "durability": 80.5
      },
      {
        "item": "방패",
        "quantity": 1,
        "durability": 60.0
      },
      {
        "item": "ν¬μ…˜",
        "quantity": 10,
        "durability": null
      }
    ],
    "achievements": null
  }
}
  • player : 객체 νƒ€μž…, ν”Œλ ˆμ΄μ–΄μ— λŒ€ν•œ λͺ¨λ“  정보λ₯Ό 포함.
  • name : λ¬Έμžμ—΄ νƒ€μž…, ν”Œλ ˆμ΄μ–΄μ˜ 이름.
  • stats : 객체 νƒ€μž…, ν”Œλ ˆμ΄μ–΄μ˜ 레벨, κ²½ν—˜μΉ˜, 프리미엄 νšŒμ› 여뢀에 λŒ€ν•œ 정보λ₯Ό 포함.
    • level: 숫자 νƒ€μž…, ν”Œλ ˆμ΄μ–΄μ˜ 레벨.
    • experience: 숫자 νƒ€μž…, ν”Œλ ˆμ΄μ–΄μ˜ κ²½ν—˜μΉ˜.
  • isPremium: λΆˆλ¦¬μ–Έ νƒ€μž…, 프리미엄 νšŒμ› μ—¬λΆ€.
  • inventory: λ°°μ—΄ νƒ€μž…, ν”Œλ ˆμ΄μ–΄μ˜ 인벀토리 μ•„μ΄ν…œ λͺ©λ‘.
    • 각 μ•„μ΄ν…œμ€ 객체 νƒ€μž…μœΌλ‘œ, item(λ¬Έμžμ—΄), quantity(숫자), durability(숫자 λ˜λŠ” 널) ν•„λ“œλ₯Ό 가짐.
  • achievements: 널 νƒ€μž…, ν˜„μž¬ ν”Œλ ˆμ΄μ–΄κ°€ λ‹¬μ„±ν•œ 업적이 μ—†μŒμ„ 의미.

3. JSON을 μ“°λ©΄μ„œ μ£Όμ˜ν•΄μ•Ό ν•  것

  • 킀와 λ¬Έμžμ—΄ 값은 μž‘μ€λ”°μ˜΄ν‘œ''κ°€ μ•„λ‹Œ ν°λ”°μ˜΄ν‘œ""둜 감싸야 ν•œλ‹€.
(X)    { 'name': '홍길동' }
(O)	   { "name": "홍길동" }
  • 각 μš”μ†Œμ˜ ꡬ뢄은 μ‰Όν‘œ,둜 κ΅¬λΆ„ν•˜λ©°, λ§ˆμ§€λ§‰ μš”μ†Œ λ’€μ—” μ‰Όν‘œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
(X)
{
  "name": "홍길동",
  "age": 30,
}

(O)
{
  "name": "홍길동",
  "age": 30
}
  • JSON ν‘œμ€€μ€ 주석을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.
(X)
{
  "name": "홍길동" // μ‚¬μš©μž 이름
}
λ˜λŠ”
{
  "name": "홍길동" # μ‚¬μš©μž 이름
}

(O)
{
  "name": "홍길동"
}

μ΄λ ‡κ²Œ ν•΄μ„œ JSON에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.
μ“°λ‹€λ³΄λ‹ˆ λΆ„λŸ‰μ΄ κΈΈμ–΄μ Έμ„œ μœ λ‹ˆν‹°μ—μ„œ JSON을 ν™œμš©ν•΄ μ €μž₯ κΈ°λŠ₯을 λ§Œλ“€μ–΄ λ³΄λŠ” 것은 λ‹€μŒ κΈ€μ—μ„œ μ•Œμ•„λ³΄μž.

profile
당신을 ν•œ μ€„λ‘œ μ†Œκ°œν•΄λ³΄μ„Έμš”

0개의 λŒ“κΈ€