swift 如何创建一个快速的Codable结构体来解码和编码JSON中的MongoDB _id ObjectId()

1l5u6lss  于 2023-02-28  发布在  Swift
关注(0)|答案(2)|浏览(88)

我是一个非常新的开发人员(这是我的第一份开发工作),正在构建一个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以发送回服务器时是否有一种方法可以逆转这种情况。

pvcm50d1

pvcm50d11#

将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”的转换不应该发生。

jgovgodb

jgovgodb2#

这对我很有效:

struct ProductData: Codable {
    let _id : String
    let productId : String
    let description : String
    let ...
}

Swift还将MongoDB Date理解为String,以防有人需要知道这一点。

相关问题