首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SwiftyJSON保存JSON数据

如何使用SwiftyJSON保存JSON数据
EN

Stack Overflow用户
提问于 2017-01-01 19:38:31
回答 1查看 534关注 0票数 0

我正在尝试使用JSON库本地保存数据。下面是我目前的代码:

代码语言:javascript
复制
var jsonFile = "json.json"

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let jsonFile = "file.json"
        let jsonArray:JSON = [
            "array": [12.34, 56.78],
            "users": [
                [
                    "id": 987654,
                    "info": [
                        "name": "jack",
                        "email": "jack@gmail.com"
                    ],
                    "feeds": [98833, 23443, 213239, 23232]
                ],
                [
                    "id": 654321,
                    "info": [
                        "name": "jeffgukang",
                        "email": "jeffgukang@gmail.com"
                    ],
                    "feeds": [12345, 56789, 12423, 12412]
                ]
            ]
        ]



        if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
        {
            let path = dir.appendingPathComponent(jsonFile)

            if(!FileManager.default.fileExists(atPath: path.path))
            {
                FileManager.default.createFile(atPath: path.path, contents: Data(), attributes: nil)
                print("Created file")

                do {
                    try write(json: jsonArray, to: path)
                } catch let error{
                    print("Error: \(error.localizedDescription)")
                }

                try! write(json: jsonArray, to: path)
            } else {
                print("File existed")
                do {
                    let myJSON = try readJSON(myURL: path)
                    if let _ = myJSON
                    {
                        print("Got data")
                    } else {
                        print("No Data")
                    }
                } catch let errorOne {
                    print("Error2: \(errorOne.localizedDescription)")
                }
            }
        }
    }


}
let url = Bundle.main.url(forResource: "json", withExtension: "json")


func readJSON(myURL:URL) throws -> JSON? {

    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
    {
        let path = dir.appendingPathComponent(jsonFile)

        if(!FileManager.default.fileExists(atPath: path.path))
        {
            let data = try Data(contentsOf: path, options: .alwaysMapped)
            return JSON(data: data)
        }
    }
    return nil
}

func write(json: JSON, to url: URL) throws {
    let data = try json.rawData()
    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
    {
        let path = dir.appendingPathComponent(jsonFile)

        if(!FileManager.default.fileExists(atPath: path.path))
        {
            try data.write(to: path)
        }
    }
}

当您第一次运行该程序时,它会创建该文件并“写入jsonArray”。当您再次运行它时,它会“加载”JSON数据。

问题是,readJSON(myURL: path)的返回值等于nil

如何在IOS10.2上使用SwiftyJSON读写JSON数据?

更新

我已经在iPhone 6s模拟器中执行了我的应用程序,并检查了保存的文件json.json。以下是保存的文件:

代码语言:javascript
复制
{"array":[12.34,56.78],"users":[{"id":987654,"info":{"name":"jack","email":"jack@gmail.com"},"feeds":[98833,23443,213239,23232]},{"id":654321,"info":{"name":"jeffgukang","email":"jeffgukang@gmail.com"},"feeds":[12345,56789,12423,12412]}]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-02 12:21:17

我刚刚说出了问题的所在。

在readJSON()函数中:

代码语言:javascript
复制
func readJSON(myURL:URL) throws -> JSON? {

    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
    {
        let path = dir.appendingPathComponent(jsonFile)

        if(!FileManager.default.fileExists(atPath: path.path))
        {
            let data = try Data(contentsOf: path, options: .alwaysMapped)
            return JSON(data: data)
        }
    }
    return nil
}

if(!FileManager.default.fileExists(atPath: path.path))应该是if(FileManager.default.fileExists(atPath: path.path))

以前,我只是在文件不存在的情况下才加载数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41418363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档