Swift: внутренняя переменная с типом данных была закодирована с помощью JSONEncoder.Как правильно его десериализовать? - PullRequest
0 голосов
/ 19 декабря 2018

Рассмотрим следующий пример:

import Foundation 

class UDFrame: Codable {

    var data:Data

    init(data:Data) {
        self.data = data
    }

}


class Event: Codable {

    var name:String

    init(name:String) {
        self.name = name
    }

}

let encoder = JSONEncoder()
let event = Event(name: "eventName")
let serializedEvent = try encoder.encode(event)
let frame = UDFrame(data: serializedEvent)
let serializedFrame = try encoder.encode(frame)
print(String(data: serializedFrame, encoding: String.Encoding.utf8)!)

Результат оператора print следующий: {"data":"eyJuYW1lIjoiZXZlbnROYW1lIn0="}.

У меня вопрос, как вывести "eventName" из этого бреда?

И, если возможно, не могли бы вы объяснить, почему Data сериализуется таким образом с помощью JSONEncoder, иКак получить исходные данные на другой платформе, если указан такой JSON?

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете просто использовать JSONDecoder для декодирования в кодировке JSON Data.

Data это просто base64encoded, поэтому вам просто нужно декодировать base64 на другой платформе, чтобы получить обратноисходные данные.Однако нет необходимости хранить JSON-кодированный объект как свойство другого объекта, вы можете просто использовать JSON-кодированный объект.

...