【问题标题】:Swift Realm import Json Array DataSwift Realm 导入 Json 数组数据
【发布时间】:2019-08-27 04:19:50
【问题描述】:

我需要将初始数据从 Json 数组文件安装到我的 Swift Realm 中。

json 数据位于名为“FundData.json”的文件中。

我认为我在读取 Json 数据时遇到问题,因为它位于数组中。

进行这种数据库初始设置的最佳方法是什么?我通常使用 SwiftyJSON。我不是 Json 或 Realm 类型的人。

这是简化的 Realm 类:

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)
    }

谢谢。

【问题讨论】:

    标签: json swift realm


    【解决方案1】:

    将解析行更改为

    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": "先锋 500 指数基金", "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", "类型”:“股票”]]

    您也可以考虑让您的 Fund 类实现 Codable,但我不确定这是否值得。

    【讨论】:

    • 非常感谢。使用本地文件和 Json/Realm 的组合真的让我很困惑。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2015-10-04
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多