如何使用 SwiftyJSON 保存 JSON 数据

How to save JSON data using SwiftyJSON

我正在尝试使用 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)
        }
    }
}

当您第一次 运行 程序时,它会创建文件和 'writes the jsonArray'。当您再次 运行 时,它会 'loads' 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]}]}

我刚刚发现问题所在。

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

以前,我只是在文件不存在时加载数据。