# 공부를 위해 정리하는 글이므로, 정확하지 않을 수 있습니다.

  • Codable이란?

    • A type that can convert itself into and out of an external representation."

      자신을 변환하거나 외부표현(external representation)으로 변환할 수 있는 타입

    • 즉, 특정 객체가 Codable 프로토콜을 채택하면, 해당 객체는 'json'과 같은 외부 타입으로 인코딩과 다시 json에서 객체로 디코딩이 가능하게 된다.

  • Codable 객체를 json으로 인코딩하기

    • 아래는 json으로 encoding한 예제이다. (Person객체 -> json)

      1. 인스턴스를 data 타입으로 인코딩

      2. data타입을 json 타입으로 변경

 func codableTest() {
        
        struct Person : Codable{
            var name : String?
            var age : Int
        }
        
        let encoder = JSONEncoder()
        let object = Person(name: "zeze", age: 7)
        let jsonData = try? encoder.encode(object)
        
        if let jsonData = jsonData, let jsonString = String(data: jsonData, encoding: .utf8){
            print(jsonString) //{"name":"Zedd","age":100}
        }

}

  

  •  
  • json을 인스턴스타입으로 파싱하기 ( jsonStr ➔ Data ➔ Object )

    • 받아온 json을 인스턴스로 파싱하는 것이 더 자주 사용되는 방식

    • 인코딩했던것과 반대방법으로

      1. json을 읽어 json String 값으로 저장

      2. json String 타입을 data타입으로 변경

      3. data타입인스턴스로 디코딩

func codableDecoding(jsonStr : String){

  	let decoder = JSONDecoder()
    var data = jsonStr.data(using: .utf8) // json형식을 Data타입으로 변경
    // data타입을 인스턴스 타입으로 변경
    if let data = data, let myPerson = try? decoder.decode(Person.self, from: data){
    	print(myPerson.name) //Zedd
      print(myPerson.age)
    }
}
  •  

 

 

※ json 파일을 json string으로 읽어오기

  1. 파일 경로 가져오기

  2. 파일경로로 json String 가져오기

let filePath = Bundle.main.path(forResource: "animals", ofType: "json")
let content = try! String(contentsOfFile: filePath!)

 

menuItemArray 에 데이터가 들어간 모습

 

+ Recent posts