【问题标题】:How to make a swift Codable struct that will decode and encode a MongoDB _id ObjectId() in JSON如何制作一个快速的 Codable 结构,它将在 JSON 中解码和编码 MongoDB _id ObjectId()
【发布时间】:2019-05-06 13:12:18
【问题描述】:

我是一个非常新的开发人员(这是我的第一份开发工作),我正在构建一个用于创建/处理订单的 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 ...
}

我不知道变量名称或类型是什么。我知道它里面有一个时间戳和一些其他信息,我已经读过它被表示为一个字符串,但我觉得如果我在我的产品 Codable 结构中尝试类似let _id:String 的东西,它不会t 解码/编码我想象的方式。

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

编辑: 经过一些实验,我找到了 _id 对象的原始 JSON:

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

Swift 变量/属性名称中不允许使用美元符号,因此我不确定如何以同时满足传入和传出的方式进行 - 我可以通过手动初始化 JSON 来制作自定义键,这样它才能正常工作使用 Swift,但我不确定在将同一对象编码回 JSON 以发送回服务器时是否有办法扭转这种情况。

【问题讨论】:

    标签: json swift mongodb objectid


    【解决方案1】:

    将 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" 的转换不是应该发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      相关资源
      最近更新 更多