首页 > 解决方案 > Swift:使用顶点列表制作一个快速字典并将其转换为 JSON

问题描述

我想为我捕获的数据制作一个字典。我已经阅读了有关为一个或两个键值对编写简单字典的 swift 文档。但是,我捕获的数据如下所示:

在此处输入图像描述

这就是我为 JSON strcut 所拥有的

struct CaptureData {
    var vertices: [SIMD3<Float>]

    var verticesFormatted : String {
        let vertices_x = vertices.map{ "\($0.x)"}
        let vertices_y = vertices.map{ "\($0.y)"}
        let vertices_z = vertices.map{ "\($0.z)"}
            return "\(vertices_x)\(vertices_y)\(vertices_z)"
        }
    var jsonDict: [String : Any] =
        [
               "facetracking_data" : [
                "info" : [

                    "time_collected" : Date().timeIntervalSince1970
                ],
                "data" : [
                    "frame" : 0,
                    "timestamp" : 12343425,
                    "vertices" : [
                        "x": 0.1,
                        "y": 0.2,
                        "z": 0.3
                        ]
                ]
           ]
    ]

如何制作带有顶点列表的快速字典并将其转换为我定义的 JSON

更新

我按照 Koen 的建议从 QuickType 获取结构。

//   let facetrackingDemoData = try? newJSONDecoder().decode(FacetrackingDemoData.self, from: jsonData)

import Foundation

// MARK: - FacetrackingDemoData
struct FacetrackingDemoData: Codable {
    let facetrackingData: FacetrackingData

    enum CodingKeys: String, CodingKey {
        case facetrackingData = "facetracking_data"
    }
}

// MARK: - FacetrackingData
struct FacetrackingData: Codable {
    let info: Info
    let data: [Datum]
}

// MARK: - Datum
struct Datum: Codable {
    let frame, timestamp: Int
    let verticies: [Verticy]
}

// MARK: - Verticy
struct Verticy: Codable {
    let vertex: Int
    let x, y, z: Double
}

// MARK: - Info
struct Info: Codable {
    let timeCollected: String

    enum CodingKeys: String, CodingKey {
        case timeCollected = "time_collected"
    }
}

标签: iosswiftxcode

解决方案


推荐阅读