我是一个非常新的开发人员(这是我的第一份开发工作)构建一个 Swift/iOS 应用程序来创建/处理订单,并且服务器向我发送一个 JSON 格式的 ObjectID() 对象以及我查找的每个产品。经过一些研究,这似乎是一个 MongoDB 对象。
为我的 API 路由编写代码的绅士希望我为服务器发送给我的每个产品获取该对象,这样我就可以将它与包含该产品的任何订单一起发送回服务器。他说,这将使他在处理新订单时更容易访问产品。
到目前为止,我在解码服务器发送给我的 JSON 时没有遇到任何问题,因为它采用 String、Int、Float 等格式,或者只是另一个需要新 Codable 结构的 JSON 对象相同。
当谈到为 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 ...
}
我不知道变量名或类型是什么。我知道它里面有一个时间戳和一些其他信息,我已经读过它被表示为一个字符串,但是如果我尝试像 let _id:String
这样的东西,我会有这种感觉我的产品 Codable 结构,它不会按照我想象的方式解码/编码。
我想知道如何构建一个“类型”来正确捕获/解码向我抛出的 _id 对象。如果有一种方法可以在不解码的情况下简单地保存该数据,并在以后需要时将其发回,那也符合我的目的。
编辑: 经过一些实验,我找到了 _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"的转换不是应该发生什么。
关于json - 如何制作一个快速的 Codable 结构,它将在 JSON 中解码和编码 MongoDB _id ObjectId(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624300/