Language/JSON JSON νƒ€μž…
  • 728x90
    λ°˜μ‘ν˜•

     

    JSON νƒ€μž…


     

    νƒ€μž…(Datatype)

    πŸ“Œ JSONμ—μ„œλŠ” λ°μ΄ν„°μ˜ κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ νƒ€μž…μ„ μ œκ³΅ν•˜κ³  μžˆλ‹€. JSONμ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λ³Ένƒ€μž…μ€ λ‹€μŒκ³Ό κ°™λ‹€.

    1. 숫자(number)
    2. λ¬Έμžμ—΄(string)
    3. λΆˆλ¦¬μ–Έ(boolean)
    4. 객체(object)
    5. λ°°μ—΄(array)
    6. null

     

     

    숫자(Number)

    πŸ“Œ JSONμ—μ„œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” 숫자의 μ’…λ₯˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

    1. μ •μˆ˜(integer)
    2. μ‹€μˆ˜(fraction)
    3. μ§€μˆ˜(exponent)

     

    JSONμ—μ„œλŠ” 8μ§„μˆ˜λ‚˜ 16μ§„μˆ˜ 등을 ν‘œν˜„ν•˜λŠ” 방법은 μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

     

     

    μ •μˆ˜(Integer)

    πŸ“Œ JSONμ—μ„œ μ •μˆ˜λŠ” λΆ€ν˜Έλ₯Ό κ°€μ§€λŠ” μ†Œμˆ˜ 뢀뢄이 μ—†λŠ” 수λ₯Ό μ˜λ―Έν•œλ‹€.

     

    πŸ”” 예제)

    {    
    	"age": 1
    }

     

     

     

    μ‹€μˆ˜(Fraction)

    πŸ“Œ JSONμ—μ„œ μ‹€μˆ˜λŠ” μ†Œμˆ˜ 뢀뢄을 κ°€μ§€λŠ” 수λ₯Ό μ˜λ―Έν•œλ‹€.

     

    πŸ”” 예제)

    {    
    	"weight": 2.14
    }

     

     

    μ§€μˆ˜(Exponent)

    πŸ“Œ JSONμ—μ„œλŠ” 맀우 큰 μˆ˜λ‚˜ 맀우 μž‘μ€ 수λ₯Ό ν‘œν˜„ν•  λ•Œ eν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜μ—¬ μ§€μˆ˜λ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

     

    πŸ”” 예제)

    {
    	"size": 5.8426e+2
    }

     

     

    λ¬Έμžμ—΄

    πŸ“Œ JSONμ—μ„œ λ¬Έμžμ—΄(string)μ΄λž€ 일련의 μ—°μ†λœ 문자의 집합을 μ˜λ―Έν•œλ‹€. μ΄λŸ¬ν•œ λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œ("") μ•ˆμ— μœ λ‹ˆμ½”λ“œ λ¬Έμžλ“€μ˜ λ‚˜μ—΄λ‘œ κ΅¬μ„±λœλ‹€.

    JSONμ—μ„œ μ—­μŠ¬λž˜μ‹œ(\) λ¬ΈμžλŠ” νŠΉμ • λ¬Έμžμ™€ ν•¨κ»˜ μ‚¬μš©λ˜μ–΄ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€(escape sequence)둜 μ‚¬μš©λœλ‹€. λ”°λΌμ„œ JSONλ¬Έμžμ—΄μ—λŠ” μ—­μŠ¬λž˜μ‹œ(\)와 ν°λ”°μ˜΄ν‘œ(")λ₯Ό μ‚¬μš©ν•  수 μ—†μœΌλ©°, μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λ‘œ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

    πŸ”” 예제)

    {
    	"name": "식빡"
    }

     

    πŸ’‘ TIP ? μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ¬Έμžμ—΄μ„ ν‘œν˜„ν•  λ•Œ ν°λ”°μ˜΄ν‘œ("")와 μž‘은 λ”°μ˜΄ν‘œ(")λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, JSONμ—μ„œλŠ” 였직 ν°λ”°μ˜΄ν‘œ("")λ§Œμ„ μ‚¬μš©ν•  수 μžˆλ‹€.

     

     

     

    μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€(Escape Sequence)

    πŸ“Œ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€(escape sequence)λŠ” λ¬Έμžμ—΄μ΄ 화면에 좜λ ₯될 λ•Œ μ‚¬μš©ν•˜κ²Œ 될 νŠΉμˆ˜ν•œ 문자λ₯Ό μœ„ν•΄ λ§Œλ“€μ–΄μ‘Œλ‹€.

    μ΄λŸ¬ν•œ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€ μ—­μŠ¬λž˜μ‹œ(\)와 νŠΉμ • λ¬Έμžμ™€μ˜ μ‘°ν•©μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

     

    JSONμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

     

    μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€ μ„€λͺ…
    \d 백슀페이슀
    \f 폼 ν”Όλ“œ(form feed)
    \n κ°œν–‰
    \r 캐리지 리턴(carrige return)
    \t νƒ­(tab)
    \" ν°λ”°μ˜΄ν‘œ
    \/ μŠ¬λž˜μ‹œ
    \\ μ—­μŠ¬λž˜μ‹œ
    \uHHHH 16μ§„μˆ˜ λ„€ 자리둜 ν‘œν˜„λœ μœ λ‹ˆμ½”λ“œ 문자

     

    λ‹€μŒ μ˜ˆμ œλŠ” JSON λ¬Έμžμ—΄μ—μ„œ 큰 λ”°μ˜΄ν‘œλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ˜ˆμ œμ΄λ‹€.

     

    πŸ”” 예제)

    {
    	"comment": "μ•ˆλ…•ν•˜μ„Έμš”. \"식빡\" μž…λ‹ˆλ‹€."
    }

     

    JSON νŒŒμ„œ(parser)λŠ” μš°μ„  JSON 데이터λ₯Ό λͺ¨λ‘ 읽어 듀인닀.

     

    μœ„μ˜ 예제처럼 ν°λ”°μ˜΄ν‘œλ₯Ό μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€(\")둜 ν‘œν˜„ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, μ‹λΉ΅μ΄λΌλŠ” λ¬Έμžμ—΄ μ•žμ— μžˆλŠ” ν°λ”°μ˜΄ν‘œμ—μ„œ λ¬Έμžμ—΄μ΄ λͺ¨λ‘ 끝났닀고 인식할것이닀. λ”°λΌμ„œ JSON νŒŒμ„œλŠ” 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ 것이닀.

     

    이처럼 λ¬Έμžμ—΄ λ‚΄μ—μ„œ ν°λ”°μ˜΄ν‘œλ‚˜ μ—­μŠ¬λž˜μ‹œλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ JSON νŒŒμ„œμ— ν•΄λ‹Ή λ”°μ˜΄ν‘œλŠ” λ¬Έμžμ—΄μ„ λλ‚΄λŠ” λ”°μ˜΄ν‘œκ°€ μ•„λ‹ˆλΌλŠ” 사싀을 μ•Œλ €μ£Όμ–΄μ•Όλ§Œ ν•œλ‹€.

     

     

    λΆˆλ¦¬μ–Έ(Boolean)

    πŸ“Œ JSONμ—μ„œ λΆˆλ¦¬μ–Έ 값은 μ°Έ(true)κ³Ό 거짓(false)을 ν‘œν˜„ν•œλ‹€. 일뢀 λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” true κ°’μœΌλ‘œ 1을, false κ°’μœΌλ‘œ 0을 λŒ€μ‹  μ‚¬μš©ν•  수 μžˆλ‹€. λ˜ν•œ, λŒ€μ†Œλ¬Έμžμ˜ ꡬ뢄 없이 True, TRUE, False, FALSE 등을 λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆλŠ” 언어도 μ‘΄μž¬ν•œλ‹€.

     

    ν•˜μ§€λ§Œ JSONμ—μ„œ λΆˆλ¦¬μ–Έ 값은 항상 true와 falseλ₯Ό μ†Œλ¬Έμžλ‘œ ν‘œκΈ°ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

     

    πŸ”” 예제)

    {
    	"name": "식빡",    
    	"lunch": true
    }

     

    객체(Object)

    πŸ“Œ JSONμ—μ„œ 객체(object)λž€ 데이터 이름과 κ°’μ˜ ν•œ 쌍으둜 κ΅¬μ„±λœ ν”„λ‘œνΌν‹°μ˜ μ •λ ¬λ˜μ§€ μ•Šμ€ 집합을 μ˜λ―Έν•œλ‹€.

    μ΄λŸ¬ν•œ JSON κ°μ²΄λŠ” μ€‘κ΄„ν˜Έ({})둜 λ‘˜λŸ¬μ‹Έμ—¬ μžˆλ‹€.

    • 객체에 μ €μž₯λ˜λŠ” ν”„λ‘œνΌν‹°(property)λŠ” 데이터 이름과 κ°’μ˜ ν•œ 쌍으둜 이루어져 μžˆλ‹€.
    • JSON κ°μ²΄λŠ” μ‰Όν‘œ(,)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄λŸ¬ν•œ ν”„λ‘œνΌν‹°λ₯Ό μ—¬λŸ¬ 개 κ°€μ§ˆ 수 μžˆλ‹€.
    • μ΄λ•Œ ν”„λ‘œνΌν‹°μ˜ μˆœμ„œλŠ” μ€‘μš”ν•˜μ§€ μ•ŠμœΌλ©°, λ°μ΄ν„°μ˜ 이름은 λ¬Έμžμ—΄λ‘œ λ°˜λ“œμ‹œ 큰 λ”°μ˜΄ν‘œ("")λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

     

    πŸ”” 예제)

    {
    	"name": "식빡",    
    	"family": "μ›°μ‹œμ½”κΈ°",
    	"age": 1,    
    	"weight": 2.14
    }

     

     

     

    객체 μ•ˆμ˜ 객체

    πŸ“Œ JSONμ—μ„œ 데이터 이름과 λŒ€μ‘ν•˜λŠ” κ°’μœΌλ‘œ 숫자, λ¬Έμžμ—΄, λΆˆλ¦¬μ–ΈλΏλ§Œ μ•„λ‹ˆλΌ 또 λ‹€λ₯Έ 객체가 올 μˆ˜λ„ μžˆλ‹€. λ§Œμ•½ λ°μ΄ν„°μ˜ 값이 객체라면 객체 μ•ˆμ— 객체가 ν¬ν•¨λ˜λŠ” 계측 ꡬ쑰가 ν˜•μ„±λœλ‹€.

     

    πŸ”” 예제)

    {    
    	"dog": {
    		"name": "식빡",        
    		"family": "μ›°μ‹œμ½”κΈ°",
    		"age": 1,        
    		"weight": 2.14,
    		"owner": {            
    			"ownerName": "홍길동",            
    			"phone": "01012345678"
    		}
    	}
    }

     

    μœ„μ˜ μ˜ˆμ œμ—μ„œ κ°€μž₯ μƒμœ„ κ³„μΈ΅μ˜ 데이터 이름은 "dog"이며, λ°μ΄ν„°κ°’μœΌλ‘œ λ‹€μ„― 개의 또 λ‹€λ₯Έ 데이터λ₯Ό 가지고 μžˆλ‹€.

    κ·Έμ€‘μ—μ„œ λ‹€μ„― 번째 데이터인 "owner"κ°μ²΄λŠ” "ownerName"κ³Ό "phone"μ΄λΌλŠ” 또 λ‹€λ₯Έ 데이터λ₯Ό 가지고 μžˆλ‹€.

     

     

    λ°°μ—΄(Array)

    πŸ“Œ JSONμ—μ„œ λ°°μ—΄(array)μ΄λž€ μ—¬λŸ¬ 개의 데이터가 μˆœμ„œλ₯Ό 가지고 λ‚˜μ—΄λœ 집합을 μ˜λ―Έν•œλ‹€. μ΄λŸ¬ν•œ JSON 배열은 λŒ€κ΄„ν˜Έ([])둜 λ‘˜λŸ¬μ‹Έμ—¬ μžˆλ‹€.

     

    • JSON 배열은 μ‰Όν‘œ(,)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 개의 데이터λ₯Ό λ‚˜μ—΄ν•  수 μžˆλ‹€.
    • 이 방식은 κ°μ²΄μ—μ„œ ν”„λ‘œνΌν‹°λ₯Ό λ‚˜μ—΄ν•˜λŠ” 것과 λΉ„μŠ·ν•˜μ§€λ§Œ, 배열은 λ°μ΄ν„°μ˜ κ°’λ§Œμ„ λ‚˜μ—΄ν•œλ‹€λŠ” 차이가 μžˆλ‹€.
    • JSON 배열은 JSONμ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λ³Έ νƒ€μž…μ„ λͺ¨λ‘ μ €μž₯ν•  수 μžˆλ‹€.

     

    λ‹€μŒ μ˜ˆμ œλŠ” μ„Έ 개의 λ¬Έμžμ—΄ μš”μ†Œλ₯Ό κ°€μ§€λŠ” "dog"λΌλŠ” μ΄λ¦„μ˜ JSON λ°°μ—΄ μ˜ˆμ œμ΄λ‹€.

     

    πŸ”” 예제)

    {    
    	"dog": [
    		"μ›°μ‹œμ½”κΈ°",
    		"ν¬λ©”λΌλ‹ˆμ•ˆ",
    		"ν‘Έλ“€"
    	]
    }

     

    JSONμ—μ„œ λ°°μ—΄μ˜ μΈλ±μŠ€λŠ” μ–Έμ œλ‚˜ 0λΆ€ν„° μ‹œμž‘ν•œλ‹€. λ”°λΌμ„œ μœ„μ˜ μ˜ˆμ œμ—μ„œ "μ›°μ‹œμ½”κΈ°"λŠ” 0, "ν¬λ©”λΌλ‹ˆμ•ˆ"은 1, "ν‘Έλ“€"은 2의 인덱슀λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

     

     

     

    λ°°μ—΄κ³Ό 객체의 차이점

    πŸ“Œ JSONμ—μ„œ λ°°μ—΄κ³Ό κ°μ²΄λŠ” μ—¬λŸ¬ 데이터λ₯Ό 묢어놓은 μ§‘ν•©μ΄λΌλŠ” μ μ—μ„œ μ„œλ‘œ λΉ„μŠ·ν•œ νƒ€μž…μ΄λ‹€. ν•˜μ§€λ§Œ κ°μ²΄λŠ” ν”„λ‘œνΌν‹°μ˜ 집합이며, 배열은 λ°μ΄ν„°κ°’μ˜ μ§‘ν•©μ΄λΌλŠ” 차이가 μžˆλ‹€.

     

    πŸ’‘ 문법)

    {
    	"dog": [
    		"μ›°μ‹œμ½”κΈ°",
    		"ν¬λ©”λΌλ‹ˆμ•ˆ",
    		"ν‘Έλ“€",
    		{
    			"ownerName": "홍길동",            
    			"phone": "01012345678"        
    		}
    	]
    }

     

    μœ„μ˜ μ˜ˆμ œμ—μ„œ "dog"λΌλŠ” μ΄λ¦„μ˜ JSON 배열은 λ¬Έμžμ—΄λΏλ§Œ μ•„λ‹ˆλΌ 객체도 μš”μ†Œλ‘œ 가지고 μžˆλ‹€.

     

    λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 배열은 μ—¬λŸ¬ νƒ€μž…μ˜ 데이터λ₯Ό λ™μ‹œμ— κ°€μ§ˆ 수 μ—†λ‹€.

    ν•˜μ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 기반의 JSON 배열은 μ—¬λŸ¬ νƒ€μž…μ˜ λ°°μ—΄ μš”μ†Œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

     

     

    null

    πŸ“Œ JSONμ—μ„œ nullμ΄λž€ μ•„λ¬΄λŸ° 값도 가지고 μžˆμ§€ μ•Šμ€ 빈 값을 μ˜λ―Έν•œλ‹€. JSONμ—μ„œ μ΄λŸ¬ν•œ null 값은 항상 null을 μ†Œλ¬Έμžλ‘œ ν‘œκΈ°ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

     

    πŸ”” 예제)

    {   
    	"id": 1,    
    	"name": null
    }

     

     

    undefined와 null

    πŸ“Œ null은 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ undefined νƒ€μž…κ³Ό ν˜Όλ™ν•˜κΈ° 쉽닀. λ”κ΅°λ‹€λ‚˜ JSONμ—μ„œλŠ” undefined νƒ€μž…μ„ μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, λ”μš± μœ μ˜ν•΄μ•Ό ν•œλ‹€.

     

    μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 'κ°’' μžμ²΄κ°€ μ—†λ‹€λŠ” 의미의 undefined 값은 μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ λ³€μˆ˜λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 값에 μ ‘κ·Όν•  λ•Œ λ°˜ν™˜ν•œλ‹€. ν•˜μ§€λ§Œ JSONμ—μ„œ nullμ΄λž€ 'κ°’'을 가지고 μžˆμ§€ μ•Šλ‹€λŠ” 의미λ₯Ό κ°€μ§€λŠ” ν•˜λ‚˜μ˜ 데이터값이라고 ν•  수 μžˆλ‹€.

     

     

     

    728x90
    λ°˜μ‘ν˜•

    'Language > JSON' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    JSON μ‚¬μš©λ²•  (0) 2018.11.16
    [JSON] μŠ€ν‚€λ§ˆ  (0) 2018.11.15
    [JSON] 기초  (0) 2018.11.15
μƒλ‹¨μœΌλ‘œ