gpt4 book ai didi

json - Swift Codable - 如何编码和解码字符串化的 JSON 值?

转载 作者:行者123 更新时间:2023-12-02 00:50:50 25 4
gpt4 key购买 nike

我正在与之交谈的服务器需要以下格式的消息:

{
"command": "subscribe",
"identifier": "{\"channel\": \"UserChannel\"}",
"data": "{\"key\": \"value\"}"
}
identifierdata values 是一个转义的 json 字符串。

到目前为止我有这个:
struct ActionCableMessage<Message: Encodable>: Encodable {
let command: Command
let identifier: CableChannel
let data: Message?

func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(command, forKey: .command)

try container.encode(identifier, forKey: .identifier) // ????
}

private enum CodingKeys: String, CodingKey {
case command, identifier, data
}
}

但我不知道从这里做什么。我想我需要一个 protocolCableChannelMessage可以符合,提供 extension实现 encode (to encoder: Encoder) 的函数,这确保了 Encoder必须是 JSONEncoder ,如果是这样,则使用它将自己的值重写为转义的 json 字符串。

我还需要将其解码回 ActionCableMessage struct,但我还没有走那么远。

最佳答案

I think I need a protocol that CableChannel and Message can conform to


好吧,那个协议(protocol)是 Encodable (或 Codable 如果您愿意)。
// just implement these as you normally would
extension CableChannel : Encodable { ... }
extension Message : Encodable { ... }
然后在 ActionCableMessage ,您使用另一个编码器将内部对象编码为 JSON 数据,然后将其转换为字符串,然后对该字符串进行编码:
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(command, forKey: .command)

let subencoder = JSONEncoder()
let identifierString = try String(data: subencoder.encode(identifier), encoding: .utf8)

try container.encode(identifierString, forKey: .identifier)

// do the same for "data"
}
类似的解码:
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
command = try container.decode(String.self, forKey: .command)
let identifierJSONString = try container.decode(String.self, forKey: .identifier)
// do the same for "data"

let subdecoder = JSONDecoder()
identifier = try subdecoder.decode(CableChannel.self, from: identifierJSONString.data(using: .utf8)!)
// do the same for "data"
}

关于json - Swift Codable - 如何编码和解码字符串化的 JSON 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57794395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com