Archive/꼼꼼한 재은씨 시리즈

JSON 학습정리

lgvv 2021. 4. 23. 00:14

JSON - JavaScript Object Notation의 약자로서 자바스크립트 언어에서 객체 속성을 표현하기 위해 사용하기 시작한 데이터 구조.

하지만 쉽고 간결한 표현 능력 덕분에 자바스크립트에 국한되지 않고 C 계열의 언어나 Java, Perl, Python 등 다수의 프로그래밍 언어에서도 지원되는 대표적인 텍스트 기반 데이터 구조로 자리잡았다.

JSON에 사용되는 데이터 구조는 크게 두 가지 종류로 나눌 수 있다. 

하나는 여러 가지 속성 키 - 값으로 : 집합구조를 정의할 때는 중괄호 사용

다른 하나는 성격이 비슷한 구조 리스트로 : 리스트 정의할 때는 대괄호 사용

모든 JSON은 이 두가지 구조를 활용해 사용

명칭 형식 구분
JSON 객체 {키 : 값, 키 : 값 ...} 여러 속성을 정의하는 순서 집합
JSON 배열 [객체1,객체2,객체3] 비슷한 객체가 반복 나열되는 순서화된 리스트

<데이터 구조 예시>

{

   "result" : "success",

   "name" : "lgvv",

   "age" : 35,

   "smoking" : false,

}

키에는 문자열만 사용하지만 값에는 정수, 실수, 논리값도 사용할 수 있다. 주의할 점은 문자열에만 큰 따옴표를 붙인다는 것을 기억하자

 

스위프트에서는 JSON 객체를 다룰 때에는 딕셔너리 계열의 자료형을 사용

단, 스위프트 기본 자료형에서는 딕셔너리 객체는 동일한 타입의 데이터만 담을 수 있기 때문에 타입을 범용 형식인 Any로 사용하는 경우가 많다.

 

 

ex>

var jsonObject = [String: Any]()

jsonObject["name"] = "lgvv"

jsonObject["age"] = 35

jsonObject["smoking"] = false

 

스위프트 전용 딕셔너리 구조체 외에 파운데이션 프레임워크에서 제공하는 NSDictionary, NSMutableDictionary 타입을 통해 JSON 객체를 다룰 수도 있다.

Mutable과의 차이는 이게 붙은건 편집이 가능하고, 붙지 않은 쪽은 편집이 불가능 하다는 차이가 있다.

 

ex>

[1,3,5,7,8] // 정수

["a","b","c"] // 문자열

 

// 하위에 JSON 배열이 포함된 경우

[

   ["a",b"],

   ["c","d"],

   ["e","f"],

   ["g","가"],

   ["나","다"],

]

 

// 하위에 JSON 객체를 나열한 상태

[

   {"name" : "lgvv"},

   {"name" : "jsw"},

   {"name" : "krg"},

]

 

// 객체의 항목이 반드시 같을 필요는 없어서 아래처럼도 가능 -> 단점 : 파싱하는 클라이언트 입장에서 key항목 유무에 따른 다른 처리 필요

[

   {"name" : "lgvv"},

   {"name" : "jsw", "age" : 44},

   {"name" : "krg", "userid" : "abec"},

 ]

 

// 단점 개선 버전

[

   {"name" : "lgvv", "age" : 13, "userid" : ""},

   {"name" : "jsw", "age" : 44, "userid" : ""},

   {"name" : "krg", "age" : 22 ,"userid" : "abec"},

 ]

 

 

JSON 표준 내용은 사이트 직접 찾아보기