微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可在 json 中使用随机元素进行编码

如何解决可在 json 中使用随机元素进行编码

你能告诉我如何使用Сodable解析这种json吗?

{
"-MV_nbUZXH0YxpkMtdDK": {
    "log": "Installing dependencies","ts": "2021-03-12T09:39:51.373513016Z"
},"-MV_nbUeK8yJbrTkyhku": {
    "log": "Python version set to 2.7","ts": "2021-03-12T09:39:51.376706383Z"
},"-MV_nbnKj7ooihytbFb_": {
    "log": "Downloading and installing node v10.24.0...","ts": "2021-03-12T09:39:52.640846883Z"
},"-MV_nbr6_lCOgmASvjIx": {
    "log": "Downloading https://nodejs.org/dist/v10.24.0/node-v10.24.0-linux-x64.tar.xz...","ts": "2021-03-12T09:39:52.882689552Z"
},"-MV_nbx-xDFgKY5gt7LW": {
    "log": "Computing checksum with sha256sum","ts": "2021-03-12T09:39:53.257948857Z"
},"-MV_nbyq7zFzPKlZoUUW": {
    "log": "Checksums matched!","ts": "2021-03-12T09:39:53.370929002Z"
},"-MV_ncwpSrcJTxwRO-9Y": {
    "log": "Now using node v10.24.0 (npm v6.14.11)","ts": "2021-03-12T09:39:55.588474395Z"
},"-MV_ncXt4WBTobLQWtsP": {
    "log": "Started restoring cached build plugins","ts": "2021-03-12T09:39:55.684040489Z"
}

我无法理解这些名字的模式) 这是从 Google 收到的构建日志,我想在应用程序中显示它们。

解决方法

import Foundation
    
struct LogValue: Codable {
        let log,ts: String
}
    
typealias Logs = [String: LogValue]

let logs = try? JSONDecoder().decode(Logs,from: jsonData)
,

我假设密钥(随机字符串)不重要,所以这个解决方案只返回实际的日志记录。

我选择使用自定义 Date 将时间戳转换为 DateFormatter 但请注意,这样做有一个缺点,因为格式化程序只处理毫秒,因此会丢失一些精度,请参阅 {{3 }}

struct LogRecord: Decodable {
    let log: String
    let timestamp: Date

    enum CodingKeys: String,CodingKey {
        case log
        case timestamp = "ts"
    }
}

这是解码器如何配置以处理日期转换

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(dateFormatter)

这里是解码,我只保留解码字典中的值

do {
    let logs = try decoder.decode([String: LogRecord].self,from: data).values
    for log in logs.sorted(by: { $0.timestamp < $1.timestamp }) {
        print("\(dateFormatter.string(from: log.timestamp)): \(log.log)")
    }
} catch {
    print(error)
}

输出

2021-03-12T10:39:51.373+0100:安装依赖
2021-03-12T10:39:51.376+0100:Python 版本设置为 2.7
2021-03-12T10:39:52.640+0100:下载并安装节点 v10.24.0...
2021-03-12T10:39:52.882+0100:下载 nodejs.org/dist/v10.24.0/node-v10.24.0-linux-x64.tar.xz...
2021-03-12T10:39:53.257+0100:使用 sha256sum 计算校验和
2021-03-12T10:39:53.370+0100:校验和匹配!
2021-03-12T10:39:55.588+0100:现在使用节点 v10.24.0 (npm v6.14.11)
2021-03-12T10:39:55.684+0100:开始恢复缓存的构建插件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。