读取/写入本地 json 文件 swift 4

GUR*_*URU 5 json swift swift4

请帮助我!\n我在项目中添加了一个 json 文件\n我的 json 文件:

\n\n
{\n  "person": [\n    {\n      "title": "\xd0\x92\xd0\xb8\xd1\x82\xd0\xb0\xd0\xbc\xd0\xb8\xd0\xbd \xd0\x90",\n      "image": "Vitamin1",\n      "favorite": false\n    },\n    {\n      "title": "\xd0\x92\xd0\xb8\xd1\x82\xd0\xb0\xd0\xbc\xd0\xb8\xd0\xbd B6",\n      "image": "Vitamin2",\n      "favorite": false\n    }\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以读取文件:

\n\n
struct ResponseData: Decodable {\n    var person: [Person]\n}\n\nstruct Person : Decodable {\n    var title: String\n    var image: String\n    var favorite: Bool\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

从文件函数加载 json:

\n\n
func loadJson(filename fileName: String) -> [Person]? {\n    if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {\n        do {\n            let data = try Data(contentsOf: url)\n            let decoder = JSONDecoder()\n            let jsonData = try decoder.decode(ResponseData.self, from: data)\n            return jsonData.person\n        } catch {\n            print("error:\\(error)")\n        }\n    }\n    return nil\n}\n\nvar VTarray2 = [Person]()\n\noverride func viewDidLoad() {\n    super.viewDidLoad()\n\n    VTarray2 = loadJson(filename: "document")!\n    VTarray2[0].favorite = true\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我编写函数并得到我的编辑 json!\n现在我需要在文件中写入json

\n\n
func encoderJsonFiles() { \n    let encoder = JSONEncoder()\n    do {\n        let jsonData = try encoder.encode(VTarray2)\n        if let jsonString = String(data: jsonData, encoding: .utf8) {\n           print(jsonString)\n        }\n    } catch {\n            print(error.localizedDescription)\n    }\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我编写了保存到文件的函数

\n\n
func SaveToFile(){\n let file = "Myfile.json" \n\n            if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {\n\n                let fileURL = dir.appendingPathComponent(file)\n\n                do {\n                    let jsonData = try encoder.encode(VTarray2)\n                    try jsonData.write(to: fileURL)\n                }\n                catch {/* error handling here */}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加函数LoadFromJsonFile()\n我读取数据。但我无法以 JSON 格式解码它们\n如何解析数据?

\n\n
func LoadFromJsonFile() {\n    let fileURL = UserDefaults.standard.url(forKey: "fileURL")!\n    do {\n        let myJSON = try String(contentsOf: fileURL, encoding: .utf8)\n        print("JSONLoad : \\(myJSON)")\n        print("JSONPath: \\(fileURL)")\n    }\n    catch {print("Error")}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

谢谢你!

\n

Sh_*_*han 5

使用

struct ResponseData: Codable {
Run Code Online (Sandbox Code Playgroud)

能够解码

let dic = try decoder.decode(ResponseData.self, from: data)
Run Code Online (Sandbox Code Playgroud)

并编码

let data = try JSONEncoder().encode(item)
Run Code Online (Sandbox Code Playgroud)

  • 您无法保存回主包中,您需要创建一个 txt 文件(例如文档目录)并保存数据 (2认同)