[英]How to write JSON to Realm in Swift
I can't find information how to write my JSON
data to my Realm DB
in Swift
.我找不到如何在Swift
中将我的JSON
数据写入我的Realm DB
的信息。
I have class:我有课:
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 = ""
}
In here I take JSON
from server:在这里,我从服务器获取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
}
And how to write my data to Realm DB
?以及如何将我的数据写入Realm DB
?
this :这个:
func insertOrUpdate(news: News) {
try! realm.write({
realm.add(news)
})
}
but it is better you create a model without inherit from object :但最好创建一个没有从对象继承的模型:
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 = ""
}
then after parse json you call insertOrUpdate and map data with NewsRealm :然后在解析 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)
})
}
for update filed .更新归档。 you should define method in newsRealm for primary key:您应该在 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"
}
}
and then for update :然后更新:
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) })
}
if a new filed so your object add into database but there are in database your object be update .如果一个新的文件,所以你的对象添加到数据库中,但数据库中有你的对象被更新。
sorry for my english ;)对不起我的英语;)
This code works for me, you shouldn't create class News and NewsRealm, just one:这段代码对我有用,你不应该创建类 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
}
}
}
}
Somwhere in code代码中的某个地方
let model = News(value: jsonObject)
Using Swift 5 and RealmSwift v10.20.0使用Swift 5和RealmSwift v10.20.0
Setting a primary key to your News class with this code:使用以下代码为您的 News 类设置主键:
override static func primaryKey() -> String? {
return "newsID"
}
You can parse and save the JSON like this way:您可以像这样解析和保存 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.