json - 读/写本地 json 文件 swift 4

标签 json swift swift4

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

{
  "person": [
    {
      "title": "Витамин А",
      "image": "Vitamin1",
      "favorite": false
    },
    {
      "title": "Витамин B6",
      "image": "Vitamin2",
      "favorite": false
    }
  ]
}

我可以读取文件:

struct ResponseData: Decodable {
    var person: [Person]
}

struct Person : Decodable {
    var title: String
    var image: String
    var favorite: Bool
}

从文件中加载json函数:

func loadJson(filename fileName: String) -> [Person]? {
    if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {
        do {
            let data = try Data(contentsOf: url)
            let decoder = JSONDecoder()
            let jsonData = try decoder.decode(ResponseData.self, from: data)
            return jsonData.person
        } catch {
            print("error:\(error)")
        }
    }
    return nil
}

var VTarray2 = [Person]()

override func viewDidLoad() {
    super.viewDidLoad()

    VTarray2 = loadJson(filename: "document")!
    VTarray2[0].favorite = true
}

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

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

我写了保存到文件的函数

func SaveToFile(){
 let file = "Myfile.json" 

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

                let fileURL = dir.appendingPathComponent(file)

                do {
                    let jsonData = try encoder.encode(VTarray2)
                    try jsonData.write(to: fileURL)
                }
                catch {/* error handling here */}
}

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

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

谢谢!

最佳答案

使用

struct ResponseData: Codable {

能够解码

let dic = try decoder.decode(ResponseData.self, from: data)

并编码

let data = try JSONEncoder().encode(item)

关于json - 读/写本地 json 文件 swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654842/

相关文章:

swift - 如何将 Swift 3 中构建的 cocoapod 更新到 Swift 4

arrays - 如果单个元素解码失败,Swift JSONDecode 解码数组将失败

javascript - 在 JavaScript 中,如何更改任何对象的 JSON.stringify 的默认输出

java - 将 JDBC 返回的 Java 字符串转换为 Json 对象

swift - 如何在 Core Data 和 NSPredicate 中仅获取一对多关系的子集

ios - 有没有办法删除一天前的所有远程通知?

ios - 使用 Swift 在 TableView 中重新加载单元格数据

ios - 不建议颜色文字 - Xcode 9

javascript - 这对从 json 服务中提取的 SEO : dynamic content generated by JavaScript, 有何作用

JSON Unmarshal 预期响应和错误消息