일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Navigation
- Mock
- 부트캠프
- SWIFT
- @available
- roundingMode
- SWIFTUI
- IOS
- UIResponder
- 독후감
- human interface guidelines
- NotificationCenter
- Failed to register bundle identifier
- Structures and Classes
- 스타트업주니어로살아남기
- 책후기
- mvvm
- xcode
- viewcontroller
- 스위프트
- 독서후기
- Codegen
- NumberFormatter
- delegation
- View Life Cycle
- Modality
- 아이폰
- Info.plist
- 야곰아카데미
- contentInset
- Today
- Total
호댕의 iOS 개발
[iOS] JSON 데이터를 만들고 parsing하기 본문
JSON은 무엇일까?
JSON은 Javascript Object Notation의 줄인 말이다.
그럼 분명 나는 Swift로 개발을 공부하고 있는데 왜 Javascript에서 객체를 표기하는 방법을 배워야 하는 것일까?
그 이유는 단순하다.
최근 JSON을 데이터를 전달하고 저장하는 대표적인 방법으로 사용하고 있기 때문이다.
컴퓨터의 데이터는 전부 0과 1로 구성이 되어 있는데, 컴퓨터 간에 데이터를 전달하려면 서로 0과 1을 해석하는 방식이 동일해야 한다.
그래서 HTML과 유사한 XML이라는 방식을 사용하기도 했다.
하지만 데이터를 주고 받을 때 사람도 보다 읽기 쉽도록 하길 원했고, 현재는 사람도 읽기 편한 JSON을 대부분 사용하게 되었다.
JSON 데이터의 표기 방법
{} : 객체 (딕셔너리)
[] : 배열
"" : 문자열
0 : 수
true/false : Boolean
null : 빈 값
빈 값을 nil이 아닌 null이라고 표현하는 것 빼면 Swift에서 사용하는 것과 거의 유사하다.
실제로 표기되는 것을 보면 다음과 같다.
[
{
"닉네임": "호댕",
"소유한 야아 포인트": 38
},
{
"닉네임": "예거",
"소유한 야아 포인트": 38
},
{
"닉네임": "제인",
"소유한 야아 포인트": 73
},
{
"닉네임": "애플사이다",
"소유한 야아 포인트": 37
},
{
"닉네임": "요한",
"소유한 야아 포인트": 55
},
]
그렇다면 어떻게 JSON 파일을 생성할 수 있을까?
터미널에서 JSON 파일을 생성할 수 있다.
1. 일단 cd ~/Desktop 으로 가서 파일을 생성하고 싶은 곳으로 디렉토리를 설정한다.
2. touch 원하는파일명.json 명령어를 사용한다.
3. 지정한 폴더에 가면 빈 JSON 파일을 볼 수 있다.
4. 파일을 열어 JSON 표기방법대로 작성을 해주면 된다.
5. Asset에 JSON 데이터를 등록하면 끝!
위와 같은 방법으로 간단하게 JSON 파일을 생성할 수 있다.
어떻게 JSON 파일을 parsing할까?
JSON 파일을 iOS에서 사용하려면 데이터를 parsing하는 과정이 필요하다.
이를 위해선 일단 데이터를 어떻게 parsing할 지 구조를 정해줘야 한다.
위 예시에서 보면 딕셔너리에 들어있는 key 값이 "닉네임", "소유한 야아 포인트"로 구성이 되어 있다.
하지만 한글로 네이밍을 하는 것은 권장되지 않고 한글을 코드에 너무 많이 작성하면 Xcode가 튕기는 상황도 있었다.
그럼 한글로 된 key 값을 다른 이름으로 변경하려면 어떻게 해야 할까?
이는 공식문서 Encoding and Decoding Custom Types에 나와 있다.
결론부터 말하자면 Codingkey 프로토콜을 채택하면 된다.
struct StudentsList: Decodable {
var name: String
var point: Int
enum CodingKeys: String, CodingKey {
case name = "닉네임"
case point = "소유한 야아 포인트"
}
}
예시에선 하나의 JSON 데이터를 parsing하기 때문에 데이터의 이름을 미리 적어놨지만 여러 JSON 데이터가 있는 경우 파일 이름을 매개변수로 입력받을 때 잘못 받을 수 있기 때문에 에러를 throw하도록 했다.
struct JSONParser: Decodable {
func decode(fileName: String) throws -> [StudentsList] {
guard let jsonData = NSDataAsset(name: "{JSONTest}") else {
throw ParsingError.wrongFileName
}
let jsonDecoder = JSONDecoder()
guard let decodedData = try? jsonDecoder.decode([StudentsList].self, from: jsonData.data) else {
throw ParsingError.failDecoding
}
return decodedData
}
}
또한 Swift에서 정의한 decode를 사용해 decoding할 타입, 데이터를 넣어주어 decoding 된 데이터를 반환해주면 된다!
'Software Engineering > iOS' 카테고리의 다른 글
[iOS] Setting에서 Larger Accessibility Sizes 설정에 따른 레이아웃 변경 (0) | 2021.12.18 |
---|---|
[Xcode] 시뮬레이터 버전 바꾸는 방법 (0) | 2021.12.13 |
[iOS] 코드로 화면전환하기 (0) | 2021.12.12 |
[iOS] ViewController 간 데이터 전달 방법 1 (프로퍼티에 직접 접근) (0) | 2021.11.07 |
[iOS] Notification Center (0) | 2021.11.07 |