[swift] Swift에서 파일을 JSON 형식으로 저장하는 방법

JSON은 데이터를 구조화하고 전송하기 위해 널리 사용되는 형식입니다. Swift에서는 매우 간단하게 파일을 JSON 형식으로 저장할 수 있습니다. 이번 글에서는 Swift에서 파일을 JSON 형식으로 저장하는 방법에 대해 알아보겠습니다.

1. JSONEncoder를 사용하여 파일 저장하기

Swift에서는 JSONEncoder를 사용하여 객체를 JSON 데이터로 인코드 할 수 있습니다. JSONEncoder는 Codable 프로토콜을 준수하는 타입을 인코드하는 데 사용될 수 있습니다. 아래는 파일을 JSON 형식으로 저장하는 예제 코드입니다.

import Foundation

struct Person: Codable {
    var name: String
    var age: Int
}

let person = Person(name: "John Doe", age: 30)

let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(person)

if let jsonString = String(data: jsonData, encoding: .utf8) {
    // 파일로 저장
    let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("person.json")
    try jsonString.write(to: fileURL, atomically: true, encoding: .utf8)
    print("JSON 파일이 저장되었습니다.")
} else {
    print("JSON 데이터를 문자열로 변환할 수 없습니다.")
}

위의 코드에서는 Person이라는 Codable을 준수하는 구조체를 정의하고, JSONEncoder를 사용하여 Person 객체를 JSON 데이터로 인코드합니다. 그런 다음, JSON 데이터를 문자열로 변환하고 파일로 저장하는 과정을 거칩니다. 파일은 FileManager를 통해 앱의 Document 디렉토리에 저장됩니다.

2. 파일에서 JSON 데이터 읽어오기

저장된 JSON 파일에서 데이터를 읽어오는 방법은 다음과 같습니다.

let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("person.json")

do {
    let jsonString = try String(contentsOf: fileURL, encoding: .utf8)
    let jsonData = jsonString.data(using: .utf8)
    
    let jsonDecoder = JSONDecoder()
    let person = try jsonDecoder.decode(Person.self, from: jsonData!)
    
    print("이름: \(person.name), 나이: \(person.age)")
} catch {
    print("JSON 파일을 읽어오는 데 실패했습니다. 에러: \(error)")
}

위의 코드에서는 저장된 JSON 파일을 String(contentsOf:encoding:) 메서드를 사용하여 문자열로 읽어옵니다. 그런 다음, 문자열을 다시 Data로 변환하고 JSONDecoder를 사용하여 Person 객체로 디코드합니다. 마지막으로 Person 객체의 속성을 출력하여 결과를 확인할 수 있습니다.

결론

Swift에서는 JSONEncoderJSONDecoder를 사용하여 파일을 JSON 형식으로 저장하고 읽어올 수 있습니다. 위의 방법을 활용하여 데이터를 효율적으로 구조화하고 전송할 수 있습니다.