Swift:内部数据类型变量已通过 JSONEncoder 编码。如何正确反序列化它?
Swift: inner Data-typed variable was encoded via JSONEncoder. How to deserialize it properly?
考虑下一个例子:
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 时如何在另一个平台上获取初始数据]给出了?
您可以简单地使用 JSONDecoder
解码 JSON 编码的 Data
。
Data
就是base64encoded
,所以你只需要在另一个平台上对其进行base64解码即可取回原始数据。但是,无需将 JSON 编码的对象存储为另一个对象的 属性,您可以简单地使用 JSON 编码的对象。
考虑下一个例子:
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 时如何在另一个平台上获取初始数据]给出了?
您可以简单地使用 JSONDecoder
解码 JSON 编码的 Data
。
Data
就是base64encoded
,所以你只需要在另一个平台上对其进行base64解码即可取回原始数据。但是,无需将 JSON 编码的对象存储为另一个对象的 属性,您可以简单地使用 JSON 编码的对象。