当我从API调用中接收JSON时,在解码它时,我会使用如下结构:
import Foundation
struct JSON: Codable {
var alpha: Alpha
var beta: Beta
var gamma: [Gamma]?
}
我想把JSON保存在Realm数据库中,以便以后像JSON一样使用和遍历。我的理解是,我不能只使用我编写的现有结构体,而是必须重写第二个(类似的)类,以便与Realm一起使用:
import Foundation
import RealmSwift
class RealmJSON: Object, Identifiable {
@Persisted (primaryKey: true) var id: ObjectId
@Persisted var alpha: RealmAlpha
@Persisted var beta: RealmBeta
@Persisted var gamma: RealmSwift.List<RealmGamma>?
override class func primaryKey() -> String? {
"id"
}
convenience init(id: ObjectId, alpha: RealmAlpha, beta: RealmBeta, gamma: RealmSwift.List<RealmGamma>?) {
self.init()
self.id = id
self.alpha = alpha
self.beta = beta
self.gamma = gamma
}
}
显然,这是不方便的,尤其是在处理大量JSON时。此外,我想使用Swagger codegen为我编写客户端代码,但如果我必须手动添加Realm类,这就有点违背了目的。
这是处理JSON和Realm数据库的唯一方法吗?还是我在这里遗漏了什么?
编辑:我意识到一个简单的方法是将大部分JSON存储为一个原始JSON字符串,并带有标识模式类型/版本的属性。然后,我可以获取所需的正确模式,并使用现有的JSON结构体解析原始JSON字符串...
1条答案
按热度按时间ngynwnxp1#
您可以将JSON数据直接传递给您的对象。我可以想到两种方法。
第一种方法,符合
Codable
。让我们使用下面的方法来制作json数据:
现在我们可以创建对象了:
另一种方法是使用JSONSerialization并将结果传递给值构造函数: