如何使用SwiftyJSON保存JSON数据

时间:2017-01-01 19:38:31

标签: json ios10 swifty-json

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

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

如何在ios 10.2上使用SwiftyJSON读取和编写JSON数据?

更新

我已在iPhone 6s模拟器中执行了我的应用程序,并检查了保存的文件json.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]}]}

1 个答案:

答案 0 :(得分:0)

我刚刚解决了问题所在。

在readJSON()函数中:

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

之前,如果文件不存在,我只加载数据。