Swift 领域导入 Json 数组数据
Swift Realm import Json Array Data
我需要从 Json 数组文件将初始数据安装到我的 Swift 领域。
json 数据位于名为 "FundData.json" 的文件中。
我想我在读取 Json 数据时遇到问题,因为它在一个数组中。
进行数据库初始设置的最佳方法是什么?我通常使用 SwiftyJSON。我不是 Json 或 Realm 那种人。
这是简化的领域Class:
import Foundation
import RealmSwift
class Fund: Object {
@objc dynamic var symbol:String = ""
@objc dynamic var name:String = ""
@objc dynamic var type:String = ""
@objc dynamic var primary:Bool = false
}
这里是一些 Json 数据:
[
{
"symbol": "VTSMX",
"name": "Vanguard Total Stock Market Index Fund",
"type": "stock",
"primary": "true"
},
{
"symbol": "VFIAX",
"name": "Vanguard 500 Index Fund",
"type": "stock",
"primary": "false"
},
{
"symbol": "VSMAX",
"name": "Vanguard Small-Cap Index Fund",
"type": "stock",
"primary": "false"
},
{
"symbol": "VWIGX",
"name": "Vanguard International Growth Fund Investor Shares",
"type": "stock",
"primary": "false"
}
]
我能够使用带字符串的 Realm 示例。我不知何故需要从 json 文件中获取数据。
let data = "{\"symbol\": \"VTSMX\",\"name\": \"Vanguard Total Stock Market Index Fund\",\"type\": \"stock\",\"default\": \"1\" }".data(using: .utf8)!
try! realm.write {
let json = try! JSONSerialization.jsonObject(with: data, options: [])
realm.create(Fund.self, value: json, update: .modified)
}
谢谢。
将您的解析行更改为
let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]]
和 array
变量将包含一个包含您的数据的字典数组。所以你需要遍历数组来创建你的 Fund
对象
do {
if let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] {
print(array)
}
} catch {
print(error)
}
将打印
[["name": "Vanguard Total Stock Market Index Fund", "primary": "true", "type": "stock", "symbol": "VTSMX"], ["symbol": "VFIAX", "name": "Vanguard 500 Index Fund", "type": "stock", "primary": "false"], ["type": "stock", "primary": "false", "symbol": "VSMAX", "name": "Vanguard Small-Cap Index Fund"], ["primary": "false", "symbol": "VWIGX", "name": "Vanguard International Growth Fund Investor Shares", "type": "stock"]]
您也可以考虑让您的 Fund
class 实施 Codable
,但我不确定这里是否值得。
我需要从 Json 数组文件将初始数据安装到我的 Swift 领域。
json 数据位于名为 "FundData.json" 的文件中。
我想我在读取 Json 数据时遇到问题,因为它在一个数组中。
进行数据库初始设置的最佳方法是什么?我通常使用 SwiftyJSON。我不是 Json 或 Realm 那种人。
这是简化的领域Class:
import Foundation
import RealmSwift
class Fund: Object {
@objc dynamic var symbol:String = ""
@objc dynamic var name:String = ""
@objc dynamic var type:String = ""
@objc dynamic var primary:Bool = false
}
这里是一些 Json 数据:
[
{
"symbol": "VTSMX",
"name": "Vanguard Total Stock Market Index Fund",
"type": "stock",
"primary": "true"
},
{
"symbol": "VFIAX",
"name": "Vanguard 500 Index Fund",
"type": "stock",
"primary": "false"
},
{
"symbol": "VSMAX",
"name": "Vanguard Small-Cap Index Fund",
"type": "stock",
"primary": "false"
},
{
"symbol": "VWIGX",
"name": "Vanguard International Growth Fund Investor Shares",
"type": "stock",
"primary": "false"
}
]
我能够使用带字符串的 Realm 示例。我不知何故需要从 json 文件中获取数据。
let data = "{\"symbol\": \"VTSMX\",\"name\": \"Vanguard Total Stock Market Index Fund\",\"type\": \"stock\",\"default\": \"1\" }".data(using: .utf8)!
try! realm.write {
let json = try! JSONSerialization.jsonObject(with: data, options: [])
realm.create(Fund.self, value: json, update: .modified)
}
谢谢。
将您的解析行更改为
let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]]
和 array
变量将包含一个包含您的数据的字典数组。所以你需要遍历数组来创建你的 Fund
对象
do {
if let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] {
print(array)
}
} catch {
print(error)
}
将打印
[["name": "Vanguard Total Stock Market Index Fund", "primary": "true", "type": "stock", "symbol": "VTSMX"], ["symbol": "VFIAX", "name": "Vanguard 500 Index Fund", "type": "stock", "primary": "false"], ["type": "stock", "primary": "false", "symbol": "VSMAX", "name": "Vanguard Small-Cap Index Fund"], ["primary": "false", "symbol": "VWIGX", "name": "Vanguard International Growth Fund Investor Shares", "type": "stock"]]
您也可以考虑让您的 Fund
class 实施 Codable
,但我不确定这里是否值得。