ios - 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"
}
}
解决方案
推荐阅读
- vue.js - 设置从 MVC 和内部 Vue.js Spa 到 webroot 的路由,从 URL 隐藏控制器名称
- python - Python List:选择各自索引的两个列表
- amazon-web-services - 使用 AWS 设置 IoT 后端
- firebase - 在flutter中上传firebase图像后获取url的问题
- charts - Jasper 为每个系列变量创建条形图
- dart - Is there a way to load async data on InitState method?
- xml - 在从 XML 文件生成文本输出时需要帮助
- python - pygame.event.set_grab 在异常/崩溃后保持打开状态并使程序“无法杀死”
- angular - 当 Angular 应用无法引导时如何添加新组件
- python - 在lxml objectify中获取有序列表