我是一个非常新的开发人员(这是我的第一份开发工作),正在构建一个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 struct中尝试类似let _id:String
的东西,它不会像我想象的那样解码/编码。
我想知道如何构建一个“type”来正确地捕获/解码抛出给我的_id对象。如果有一种方法可以简单地保存数据而不解码它,并在以后需要时将其发送回来,这也符合我的目的。
- EDIT:* 经过一些实验,我为_id对象找到了这个原始JSON:
"_id":{"$id":"58071f9d3f791f4f4f8b45ff"}
Swift变量/属性名中不允许使用美元符号,所以我不确定如何以一种同时满足传入和传出的方式进行处理-我可以通过手动初始化JSON来制作一个自定义键,这样它就可以正确地与Swift一起工作,但我不确定在将同一对象编码回JSON以发送回服务器时是否有一种方法可以逆转这种情况。
2条答案
按热度按时间pvcm50d11#
将JSON捕获为[String:String]的字典似乎可以达到这个目的。
然而,服务器很难将其转换回OrderId()对象-我猜从“$id”:OrderId(“someid”)到“$id”:“someid”的转换不应该发生。
jgovgodb2#
这对我很有效:
Swift还将MongoDB
Date
理解为String
,以防有人需要知道这一点。