Swift:写入 JSON 并在本地保存到 iPhone 文件

Posted

技术标签:

【中文标题】Swift:写入 JSON 并在本地保存到 iPhone 文件【英文标题】:Swift: write JSON and save to iPhone File locally 【发布时间】:2020-05-21 20:26:14 【问题描述】:

我正在学习如何将 JSON 格式的数据写入 iPhone。因此,单击一个按钮,我想将这些数据保存到 iPhone。我看了一个关于如何编写一些简单文本并将其保存到 iPhone 文件中的简单外观,并且它起作用了。但是,我尝试将相同的想法应用于 JSON 数据,但仍未弄清楚。我试过了:

我尝试将其作为我的数据(jsondata)而不是等于一些书面文本的内容。 但它似乎不适用于

尝试 jsondata.write(to: fileURL, atomically: false, encoding: .utf8)

@IBAction func writeFiles(_ sender: Any) 
        let file = "\(UUID().uuidString).txt"
               let contents = "Testing"
               let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
               let fileURL = dir.appendingPathComponent(file)
               do 
                   try contents.write(to: fileURL, atomically: false, encoding: .utf8)
               
               catch 
                   print("Error: \(error)")
               
   

对不起,我现在有点新,正在学习 Swift

谢谢!

【问题讨论】:

【参考方案1】:

这是一个简单的项目供您克隆或浏览源文件 https://github.com/eSpecialized/WriteJsonToFiles

视图控制器包含示例; https://github.com/eSpecialized/WriteJsonToFiles/blob/master/WriteToFiles/ViewController.swift

写作基本上需要做几个步骤;

    组装您的对象(字符串等)。 使用 JSONEncoder 转换为 JSONEncoded 数据。 实际的“数据”对象可以将其二进制内容写入存储。

读取数据;

    您需要一个 JSONDecoder。 您需要使用 Data(contents:...) 将 FileContents 保存在内存中 将内存中的数据解码回对象,就像它被存储一样。

一个更复杂的将 JSON 读写到 Web 服务 API 的示例在 Medium 上 > https://medium.com/better-programming/json-parsing-in-swift-2498099b78f

概念相同,目标从用户文件夹中的文件更改为 Web 服务 API。我觉得这足以让您开始阅读和编写 JSON。

Medium 文章更进一步,向您介绍了数据模型并使用 Codable 协议读写这些数据模型结构。

享受吧! :)

【讨论】:

非常感谢这个例子。我正在尝试在模拟器中解决这个问题。我试着在栏上写字并保存。但是我在 iPhone 文件中找不到这些结果?我对此有点陌生。你能解释一下如何“组装你的对象(字符串等)”吗? 嗨,比尔,我想效仿你的榜样。但我遇到的问题是,如果我有一个已定义的 JSON 结构,我怎么能称赞我的捕获到文件呢? (不是来自网络 API) Q) 我在 iPhone 文件中找不到这些结果? A) 现在在 2020 年使用 Xcode 11.x 和 Mac OS Catalina,iTunes 不可用并且不能再在 Mac 上使用。相反,您需要使用 Finder 来查看 iPhone 上的 App Files。 1. 您需要在应用程序中添加一个 plist 条目。应用程序支持 iTunes 文件共享 = YES 实际密钥原始格式; UIFileSharingEnabled 2.重新运行WriteJsonToFiles 3.现在在Finder中选择时可以看到文件;位置 > 你的 iPhone 选择“文件”选项卡找到应用程序名称,那里就是你的数据。 "我如何才能将我的捕获到文件中" 我不明白这个问题。 我用截图更新了我发布的 Repo,并且 info.plist 更改了用于访问应用程序的文件。

以上是关于Swift:写入 JSON 并在本地保存到 iPhone 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何保存响应 JSON 数组并在 swift 中使用用户默认值进行检索

如何在 Swift/XCTest 中写入本地文件?

如何从本地 JSON 文件解析数据并保存在模型类中并在 tableview 中使用

Swift 中 JSON 写入(NSConcreteMutableData)中的类型无效

Flutter 并将数据保存到本地存储

JavaScript 如何保存到本地文件?