【发布时间】:2019-01-27 21:35:28
【问题描述】:
我正在尝试读取我在另一个 (Windows) 程序中使用 NewtonSoft JSON.Net 解析器创建的 JSON 文件。 JSON 是由 JSON.Net 组件在序列化对象数组时创建的。示例 JSON 如下所示(在此示例中,我只显示了两个对象):
[{"MaxLength":23,"HasSpecialChars":false,"HasUpperCase":true,"Key":"firstOne"},
{"MaxLength":0,"HasSpecialChars":false,"HasUpperCase":false,"Key":"secondOne"}]
请注意,这是 json 中的对象数组。
现在我需要一些 Swift 代码来读取这个 JSON,并在程序中更改值后将其写出。
我的尝试
我发现了这个 SO 条目:Reading in a JSON File Using Swift 但是,要获取对象数组,该条目使用可编码的单独结构,如下所示:
struct ResponseData: Decodable {
var thisNameShowsUpInJson: [SiteKey]
}
这会强制外部数组在 json 中有自己的 name 属性。
例如,该帖子中的代码起作用的唯一方法是,如果我的 JSON 被更改为包含具有如下名称 (SiteKey) 的外部对象:
{"thisNameShowsUpInJson": [{"MaxLength":23,"HasSpecialChars":false,"HasUpperCase":true,"Key":"firstOne"},
{"MaxLength":0,"HasSpecialChars":false,"HasUpperCase":false,"Key":"secondOne"}]
}
但是,这对于 JSON.Net 将对象数组写入文件的方式是不正确的。
这是我想要序列化和反序列化的简单 Swift 类:
class SiteKey : Codable{
var Key : String
var MaxLength : Int
var HasSpecialChars : Bool
var HasUpperCase : Bool
init(key : String, maxLength : Int,
hasSpecialChars : Bool,
hasUpperCase : Bool){
Key = key;
MaxLength = maxLength;
HasSpecialChars = hasSpecialChars;
HasUpperCase = hasUpperCase;
}
}
我想从命名文件中读取数据并将数据反序列化为对象。 然后,我想将内存中的对象序列化回一个文件,就像我的示例一样。
【问题讨论】: