티스토리 뷰

Programming/Swift

1. Swift : JSON

INSWAG 2018. 7. 22. 22:04

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


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함