[swift] ObjectMapper를 사용하여 JSON 데이터의 필드를 특정 길이로 잘라내는 방법은?

JSON 데이터의 필드를 특정 길이로 잘라내기 위해서는 ObjectMapper를 사용하여 Custom Transform을 구현해야 합니다. 이를 위해 ObjectMapper에는 TransformType이라는 프로토콜이 제공되며, 이를 구현하는 클래스를 만들어서 원하는 변환 로직을 작성할 수 있습니다.

먼저, ObjectMapper에서 사용할 Custom Transform 클래스를 만들어 보겠습니다. 이 예시에서는 필드를 특정 길이로 잘라내는 CustomTransform 클래스를 만들어보도록 하겠습니다.

import ObjectMapper

class TruncateTransform: TransformType {
    typealias Object = String
    typealias JSON = String

    let maxLength: Int

    init(maxLength: Int) {
        self.maxLength = maxLength
    }

    func transformFromJSON(_ value: Any?) -> Object? {
        guard let string = value as? String else { return nil }
        return String(string.prefix(maxLength))
    }

    func transformToJSON(_ value: Object?) -> JSON? {
        return value
    }
}

위의 코드에서는 TruncateTransform이라는 클래스를 정의하였습니다. 이 클래스는 TransformType 프로토콜을 구현하므로, ObjectMapper에서 사용할 수 있습니다.

transformFromJSON 메소드는 JSON 데이터를 Object(특정 길이로 잘라진 String)로 변환해주는 로직을 구현하였습니다. 입력받은 JSON 데이터를 String으로 변환하고, prefix(maxLength) 메소드를 사용하여 필드를 maxLength 길이로 잘라냅니다.

transformToJSON 메소드는 Object를 다시 JSON으로 변환해주는 로직을 구현하는데, 이 예시에서는 변환 없이 그대로 반환하도록 구현하였습니다.

만든 TruncateTransform 클래스를 사용해보겠습니다. 예시로 다음과 같은 JSON 데이터를 가정해봅시다.

{
    "name": "This is a long name"
}

이 JSON 데이터의 “name” 필드를 10자로 잘라내기 위해서는 다음과 같이 ObjectMapper를 사용하여 변환해줄 필요가 있습니다.

import ObjectMapper

let json = "{\"name\": \"This is a long name\"}"
let truncateTransform = TruncateTransform(maxLength: 10)

if let object = Mapper<TruncationObject>().map(JSONString: json) {
    print(object.name) // Output: "This is a "
}

위의 예시에서는 TruncationObject라는 클래스를 만들어야 합니다. 다음과 같이 정의해보겠습니다.

class TruncationObject: Mappable {
    var name: String?

    required init?(map: Map) {}

    func mapping(map: Map) {
        name <- (map["name"], truncateTransform)
    }
}

위의 코드에서는 “name” 필드의 값을 truncateTransform에 매핑함으로써, JSON 데이터의 “name” 필드 값을 10자로 잘라내는 로직을 구현했습니다.

이와 같이 ObjectMapper를 사용하여 JSON 데이터의 필드를 특정 길이로 잘라내는 로직을 구현할 수 있습니다.