如何制作快速的可编码结构,以JSON

时间:2018-12-05 02:30:17

标签: json swift mongodb objectid

我是一个非常新的开发人员(这是我的第一份开发工作),它构建一个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的东西,它将不会按照我的想象来解码/编码。

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

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

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

在Swift变量/属性名称中不允许使用美元符号,因此我不确定如何以同时满足传入和传出方式的方式进行操作-我可以通过手动初始化JSON来创建自定义键,以便其正常工作使用Swift,但是我不确定在将同一对象编码回JSON以发送回服务器时是否有一种方法可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

将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”的翻译不是应该发生什么。