[英]How to write JSON to Realm in Swift
我找不到如何在Swift
中將我的JSON
數據寫入我的Realm DB
的信息。
我有課:
class News: Object {
dynamic var newsID: String = ""
dynamic var newsTitle: String = ""
dynamic var newsFullText: String = ""
dynamic var newsAutor: String = ""
dynamic var newsCommentCount: String = ""
dynamic var newsSeenCount: String = ""
dynamic var newsDate: String = ""
dynamic var newsCategory: String = ""
}
在這里,我從服務器獲取JSON
:
func parseJSONData(data: NSData) -> [News] {
do {
let temp: NSString = NSString(data: data, encoding: NSUTF8StringEncoding)!
let myNSData = temp.dataUsingEncoding(NSUTF8StringEncoding)!
let jsonResult = try NSJSONSerialization.JSONObjectWithData(myNSData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
let jsonNews = jsonResult["posts"] as! [AnyObject]
for jsonnewes in jsonNews {
let newsJson = News()
newsJson.newsTitle = jsonnewes["post_title"] as! String
newsJson.newsAutor = jsonnewes["author_name"] as! String
newsJson.newsFullText = jsonnewes["full_text"] as! String
newsJson.newsID = jsonnewes["id"] as! String
newsJson.newsCategory = jsonnewes["menu_category_name"] as! String
newsJson.newsDate = jsonnewes["create_date"] as! String
newsJson.newsSeenCount = jsonnewes["review"] as! String
newsJson.newsCommentCount = jsonnewes["comment_count"] as! String
newsItems.append(newsJson)
}
} catch {
print(error)
}
return newsItems
}
以及如何將我的數據寫入Realm DB
?
這個:
func insertOrUpdate(news: News) {
try! realm.write({
realm.add(news)
})
}
但最好創建一個沒有從對象繼承的模型:
class News {
var newsID: String = ""
var newsTitle: String = ""
var newsFullText: String = ""
var newsAutor: String = ""
var newsCommentCount: String = ""
var newsSeenCount: String = ""
var newsDate: String = ""
var newsCategory: String = ""
}
class NewsRealm: Object {
dynamic var newsID: String = ""
dynamic var newsTitle: String = ""
dynamic var newsFullText: String = ""
dynamic var newsAutor: String = ""
dynamic var newsCommentCount: String = ""
dynamic var newsSeenCount: String = ""
dynamic var newsDate: String = ""
dynamic var newsCategory: String = ""
}
然后在解析 json 之后調用 insertOrUpdate 並使用 NewsRealm 映射數據:
func insertOrUpdate(news: News) {
let realm = try! Realm()
try! realm.write({
let newsRealm = NewsRealm()
newsRealm.newsTitle = news.newsTitle
newsRealm.newsAutor = news.newsAutor
newsRealm.newsFullText = news.newsFullText
.
.
.
realm.add(newsRealm)
})
}
更新歸檔。 您應該在 newsRealm 中為主鍵定義方法:
class NewsRealm: Object {
dynamic var newsID: String = ""
dynamic var newsTitle: String = ""
dynamic var newsFullText: String = ""
dynamic var newsAutor: String = ""
dynamic var newsCommentCount: String = ""
dynamic var newsSeenCount: String = ""
dynamic var newsDate: String = ""
dynamic var newsCategory: String = ""
override static func primaryKey() -> String? {
return "newsID"
}
}
然后更新:
func insertOrUpdate(news: News) {
let realm = try! Realm()
try! realm.write({
let newsRealm = NewsRealm()
newsRealm.newsTitle = news.newsTitle
newsRealm.newsAutor = news.newsAutor
newsRealm.newsFullText = news.newsFullText
.
.
.
realm.add(newsRealm, update: true) })
}
如果一個新的文件,所以你的對象添加到數據庫中,但數據庫中有你的對象被更新。
對不起我的英語;)
這段代碼對我有用,你不應該創建類 News 和 NewsRealm,只有一個:
import SwiftyJSON
class News: Object {
@objc dynamic var newsID: String?
@objc dynamic var newsTitle: String?
convenience init(value: JSON) {
self.init()
for (key, value) in value {
switch key {
case "newsID":
self.newsID = value.stringValue
case "newsTitle":
self.newsTitle = value.stringValue
}
}
}
}
代碼中的某個地方
let model = News(value: jsonObject)
使用Swift 5和RealmSwift v10.20.0
使用以下代碼為您的 News 類設置主鍵:
override static func primaryKey() -> String? {
return "newsID"
}
您可以像這樣解析和保存 JSON:
do {
try! realm.write {
let json = try! JSONSerialization.jsonObject(with: jsonData, options: [])
realm.create(News.self, value: json, update: .modified)
}
} catch {
print("ERROR: \(error.localizedDescription)")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.