티스토리 뷰
JSON
1) 정의
XML 방식은 태그로 구성된 마크업 형식을 기본 규격으로 사용하므로 플랫폼에 의존적이지 않은 장점이 있으나,
마크업 태그를 사용해야 하므로 주고받는 전체 데이터의 용량이 지나치게 커진다는 단점.
이 단점을 극복하기 위해 만들어진 경량의 데이터 교환 형식이 JSON 이다.
요약.
1. Javascript 언어로부터 파생. (JavaScript Object Notation)
2. 프로그래밍 언어와 플랫폼 간 독립적이고 가벼워서 XML 방식을 대체하여 현재 거의 표준으로 사용되고 있는 데이터 교환 형식
3. 최근은 거의 JSON 쓴다고 보면 된다.
2) 특징
1. 두 개의 구조를 기본으로 가짐
- 'Name : Value' 형태의 쌍을 이루는 Collection 타입. 각 언어에서 Hash table, Dictionary 등으로 구현(스위프트 에서는 Dictionary 형식.)
- 값들의 순서화된 리스트. 대부분의 언어들에서 Array, Vector, List 또는 Sequence 로 구현
2. XML(eXtensible Markup Language) 에 비해 기능이 적고 구조가 단순하여 파싱이 쉽고 빠르며 적은 용량으로 저장 가능
- 따라서 사람이 읽고 쓰는 것뿐 도 쉽고 기계가 분석하고 생성하는 것에도 (상대적으로) 더 용이. 그래서 표준이 되었음.
- Contents type 은 많이 쓰이다 보니 application/json 이 존재하며, 파일 확장자는 .json, 기본 인코딩은 UTF-8 사용.
* Ref. 파싱(Parsing) :
XML 형식의 마크업으로 전달된 데이터는 그대로 사용할 수 있는 것이 아니라 데이터를 형식에 맞게 분석하는 과정이 필요하다. 이 과정을 파싱이라고 한다.
3) JSON vs XML
1. JSON : 중괄호 { } 로 열고 닫으며, 내부에 key 와 Value 의 쌍이 작성된다.
2. XML : 어떠한 태그로 열어서 시작을 하고 태그로 닫아서 끝남. 태그의 Custom 가능.
* Ref. XML 이란?
요청에 대한 응답 데이터를 XML 포맷으로 제공하는 것.
HTML의 한계를 극복할 목적(서로 다른 시스템에서 인터넷을 통하여 데이터를 쉽게 주고받을 수 있기 위해)으로 만들어졌다.
임의의 자료 구조를 표현하는데 장점을 가지고 있다. 또 다른 장점으로는 XML은 시스템에 의존적이지 않은 마크업 형식을 통해 데이터를 주고받을 수 있어서,
데이터 교환의 표준으로 삼을 수 있다.
3. JSON 은 값을 바로 선언하면 되는 반면에, XML 은 양 쪽으로 써줘야함.
하나 씩 뜯어 살펴보자.
4) JSON - Object(객체)
JSON 에서 다루는 object 는 name/value 쌍들의 비순서화된 SET(딕셔너리는 배웠듯, 순서가 없으니까)|
좌측 중괄호( { ) 로 시작하고 우측 중괄호( } ) 로 끝내어 표현하며,
name 뒤 콜론(:) 을 붙이고 콤마(,) 로 name/value 쌍들을 구분한다.
5) JSON - Array
값들의 순서화된 Collection.
좌측 대괄호( [ )로 시작해서 우측 대괄호 ( ] ) 로 끝내어 표현하고 콤마(,)로 각 값들을 구분
딕셔너리와는 다르게 벨류만 들어있는 상태. 내부에 있는 벨류 부분에 ...
6) JSON - Value
큰 따옴표안에 string, number, true, false, null, object, array 등의 구조가 포함
object 와 array 가 있다는 것은 이 JSON의 내부는 중첩이 가능하다는 것을 의미한다.
7) JSON - String
큰 따옴표 (“ ”) 안에 둘러 싸인 0 이상의 Unicode 문자들의 조합이며 backslash escape 가 적용
특수기호는 역슬래시 뒤에 넣을 수 있다.
8) JSON - Number
8진수와 16진수 형식을 사용하지 않는 것을 제외하면 C, JAVA 등의 number 와 유사
마이너스가 들어갈 수도 있고, 0~ 9 , 쩜 등이 들어갈수도 있음...
9) 스위프트에서 사용되는 JSON
Swift 4 전에는 Multiline String이 안되어, 한줄 한줄 다 만들어줬어야 했지만, 이젠 가능해서 “ ” ” 요거( " 연속 3개) 를 활용해서 사용할 수 있다 !
Swift 에서 Dictionary는 대괄호 [ ] 를 썼지만, JSON Object 를 만들고자 하는 거니까 String으로 JSONObject 를 만들고자 할 때 중괄호 { } 를 사용한다.
쉽게 값은 키 : 값 형식을 공유하지만 Swift 의 Dictionary 는 중괄호, JSON 객체의 Dictionary 는 대괄호 를 사용한다.
자 위의 사진을 봅시다.
jsonString.data(using: .utf8)! 는 데이터로 변환하는 과정(데이터 파싱)이고,
JSONSerialization.jsonObject(with: jsonData) 는 데이터 (e.g. 010101010) 를 JSON Object 로 다시 변환하는 과정을 보여주는 것.
10) JSONSerialization
JSON 과 이에 상응하는 Foundation 객체(스위프트에서 쓰는 딕셔너리 같은 객체) 간 변환하는 객체이며, iOS 7 버전 이후로 Thread Safety 하다. (* Thread Safety 공부 )
Data 는 다음의 5가지 인코딩 지원 형식 중 하나여야 하며, 이 중 UTF-8 이 기본값으로 쓰이고 가장 효율적 (UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE)
JSON 으로 변환되기 위한 Foundation 객체는 다음 속성을 따라야 한다.
- Top Level Object : NSArray, NSDictionary
- 모든 객체는 NSString, NSNumber, NSArray, NSDictionary, NSNull 의 인스턴스
- 모든 Dictionary 의 Key 는 NSString 인스턴스
- 숫자는 NaN 이나 무한대 값이 아니어야 함
JSON data 로 변환 가능 여부는 isValidJSONObject(_:) 메서드를 통해 확인 가능하다.
11) JSON Object 생성 메소드.
12) JSON Data 생성 메소드.
참고도서)
꼼꼼한 재은씨의 Swift 3 - 이재은 저, 루비페이퍼
지금까지 JSON 에 대해 알아보았습니다. 틀린 부분이 있으면 지적해주시면 감사드리겠습니다!!
FastCampus 7th iOS Development School written by inswag
'Programming > Swift' 카테고리의 다른 글
1. Swift : ARC(Auto Reference Counting) (2) (0) | 2018.09.19 |
---|---|
1. Swift : ARC(Auto Reference Counting) (1) (0) | 2018.09.12 |
1. Swift : 집단 자료형(Collection Type) - 딕셔너리(Dictionary) (0) | 2018.06.24 |
1. Swift : 집단 자료형(Collection Type) - 집합(Set) (0) | 2018.06.17 |
1. Swift : 집단 자료형(Collection Type) - 배열(Array) (0) | 2018.06.16 |
- Total
- Today
- Yesterday
- 패스트캠퍼스
- 튜플
- swiftUI
- 타입
- tca
- 스위프트
- GCD
- fallthrough
- Operator
- 프로그래밍
- ios
- fastcampus
- commit
- OOP
- lifecycle
- 패캠
- function
- 깃허브
- 딕셔너리
- 개발스쿨
- iOS개발스쿨
- array
- ARC
- var
- 리터럴
- Dictionary
- 열거형
- inswag
- Swift
- 컨버전
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |