首页 文章

如何制作一个swift Codable结构,它将在JSON中解码和编码MongoDB _id ObjectId()

提问于
浏览
1

我是一个非常新的开发人员(这是我的第一个开发工作),构建一个用于创建/处理订单的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 的东西,它会想象得到它 . [245590] .

我想知道如何构建一个“类型”,它将正确地捕获/解码被抛向我的_id对象 . 如果有一种方法可以简单地保存数据而不对其进行解码,并在以后需要时将其发回,这也符合我的目的 .

编辑:经过一些实验,我发现_id对象的原始JSON:

"_id":{"$id":"58071f9d3f791f4f4f8b45ff"}

Swift变量/属性名称中不允许使用美元符号,因此我不确定如何以满足传入和传出的方式继续 - 我可以通过手动初始化JSON来创建自定义键,以便它可以正常使用Swift,但是我不确定是否有办法在将同一个对象重新编码回JSON以发送回服务器时将其反转 .

1 回答

  • 0

    将JSON捕获为[String:String]的字典似乎可以解决问题 .

    import Foundation
    
    struct ProductData: Codable {
        let _id : [String:String]
        let productId : String
        let description : String
        let ...
    }
    

    当我发现它是否适用于服务器时会更新 .

相关问题