如何制作一个快速的可编码结构,它将在 JSON 中解码和编码 MongoDB _id ObjectId()
问题:如何制作一个快速的可编码结构,它将在 JSON 中解码和编码 MongoDB _id ObjectId()
我是一个非常新的开发人员(这是我的第一份开发工作)构建一个用于创建/处理订单的 Swift/iOS 应用程序,并且服务器在我查找的每个产品中都向我发送 JSON 格式的 ObjectID() 对象。经过一番研究,这似乎是一个 MongoDB 对象。
为我的 API 路由编码的绅士希望我为服务器发送给我的每个产品获取该对象,因此我可以将它与包含该产品的任何订单一起发送回服务器。他说,这将使他在处理新订单时更容易访问产品。
到目前为止,我在解码服务器发送给我的 JSON 时没有遇到任何问题,因为它采用了 String、Int、Float 等格式,或者只是另一个 JSON 对象,需要一个新的 Codable 结构,其中包含更多相同的结构.
在为 ObjectID 创建 Codable 结构时,我不知道要告诉它期望什么键/值类型(属性/值类型,无论您想使用什么术语)。或者,如果这甚至是正确的方法。
这就是我现在所拥有的:
import Foundation
struct ProductData: Codable {
let _id : ObjectId
let productId : String
let description : String
let ...
}
上面出现的 ObjectId 类型是我尚未构建的自定义 Codable 结构,因为我不确定如何构建。我想它应该看起来像这样:
import Foundation
struct ObjectId : Codable {
let someVariableName : SomeCodableType
let ...
}
我不知道变量名称或类型是什么。我知道它里面有一个时间戳和一些其他信息,我已经读过它被表示为一个字符串,但我觉得如果我在我的产品 Codable 结构中尝试类似let _id:String
的东西,它不会解码/编码我想象的方式。
我想知道如何构建一个“类型”来正确捕获/解码被抛出的 _id 对象。如果有一种方法可以简单地保存该数据而不对其进行解码,并在以后需要时将其发回,那也适合我的目的。
EDIT: 经过一些实验,我为 _id 对象找到了这个原始 JSON:
"_id":{"$id":"58071f9d3f791f4f4f8b45ff"}
Swift 变量/属性名称中不允许使用美元符号,因此我不确定如何以同时满足传入和传出的方式进行操作 - 我可以通过手动初始化 JSON 来制作自定义键,以便它可以正常使用 Swift,但我不确定在将同一对象编码回 JSON 以发送回服务器时是否有办法扭转这种情况。
解答
将 JSON 捕获为 [String:String] 的字典似乎可以解决问题。
import Foundation
struct ProductData: Codable {
let _id : [String:String]
let productId : String
let description : String
let ...
}
但是,服务器正在努力将其转换回 OrderId() 对象 - 我猜测从 "$id":OrderId("someid") 到 "$id":"someid" 的转换不是应该发生的.
更多推荐
所有评论(0)