gpt4 book ai didi

swift - 如何从 Decodable 获取 utf8 解码的字符串?

转载 作者:行者123 更新时间:2023-11-30 11:26:15 38 4
gpt4 key购买 nike

问题是我有一个 json 数据包含和编码字符串,例如:

let jsonData = "{ \"encoded\": \"SGVsbG8gV29ybGQh\" }".data(using: .utf8)

我需要的是获取“SGVsbG8gV29ybGQh”字符串的解码值。

实际上我可以通过实现来获得所需的输出:

let decoder = JSONDecoder()
let result = try! decoder.decode(Result.self, from: jsonData!)

if let data = Data(base64Encoded: result.encoded), let decodedString = String(data: data, encoding: .utf8) {
print(decodedString) // Hello World!
}

我必须做的是:

  • 将从 json (result.encoded) 获取的编码字符串转换为 Data 对象

  • 再次将数据对象重新转换为字符串。

但是,实现这一目标似乎不仅仅是一步之遥,对于这种情况,是否有更好的方法可以遵循?

最佳答案

当涉及到处理Decodable的编码字符串时,实际上你甚至不必将属性声明为String,只需直接将其声明为数据

因此,对于您的情况,您应该做的是将 encoded 编辑为:

struct Result: Decodable {
var encoded: Data
}

因此:

let decoder = JSONDecoder()
let result = try! decoder.decode(Result.self, from: jsonData!)

let decodedString = String(data: result.encoded, encoding: String.Encoding.utf8)
print(decodedString ?? "") // decodedString
<小时/>

请记住,这与处理可解码的日期非常相似,例如,假设我们有以下 json 数据:

let jsonData = "{ \"timestamp\": 1527765459 }".data(using: .utf8)

显然,您不会收到数字形式的 timestamp 并将其转换为 Date 对象,而是将其声明为 Date:

struct Result: Decodable {
var timestamp: Date
}

因此:

let decoder = JSONDecoder()
// usually, you should edit decoding strategy for the date to get the expected result:
decoder.dateDecodingStrategy = .secondsSince1970

let result = try! decoder.decode(Result.self, from: jsonData!)
print(result.timestamp) // 2018-05-31 11:17:39 +0000

关于swift - 如何从 Decodable 获取 utf8 解码的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710795/

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