arrays - 在Apple Swift中将json转换为数组的字符串数组
问题描述
我正在使用 Xcode 编写我的第一个 Swift 程序(Swift 5.1)。
我在挣扎。我想要做的就是将一个 json 字符串转换为两个数组数组。一个很好的教程在这里https://developer.apple.com/swift/blog/?id=37但它太复杂了。
下面是一个示例 json 字符串。
{
"Animals" :
{
"Mice" : ["Mickey", "Minnie"],
"Ducks" : ["Donald", "Daisy"],
"Elephants" : ["Dumbo", "Yzma"]
},
"Movies" :
{
"1940s" : ["Pinocchio", "Fantasia", "Dumbo"],
"1950s" : ["Cinderella", "Treasure Island", "Peter Pan"],
"1960s" : ["The Signs of Zorro", "Swiss Family Robinson", "Mary Poppins"],
"1970s" : ["Herbie Rides Again", "Herbie Goes to Monte Carlo", "Freaky Friday"]
}
}
我想要的只是最小的蹩脚代码,我可以粘贴到 Swift 操场上来创建两个数组数组,所以在 arrayAnimal[0][1] 中是 Minnie,arrayAnimal[2][0] 是 Dumbo,arrayMovie[3][1 ] 例如 Herbie Goes to Monte Carlo。
如果可以使用 arrayAnimal["mice"][1] 来获取 Minnie,这是完美的,但现在我的重点是研究如何在 Swift 中反序列化 json 以获取数组的数组。
谢谢
解决方案
首先,您的 json 需要这个可编码模型。您应该将其添加到单独的 swift 文件中:
struct MyModel: Codable {
let animals: Animals
let movies: [String: [String]]
enum CodingKeys: String, CodingKey {
case Animals
case Movies
}
}
// MARK: - Animals
struct Animals: Codable {
let mice, ducks, elephants: [String]
enum CodingKeys: String, CodingKey {
case Mice
case Ducks
case Elephants
}
}
那么您需要将您的字符串转换为 Data :
let jsonData: Data? = jsonString.data(using: .utf8)
然后您可以轻松地将数据解码为所需的对象。
let decoder = JSONDecoder()
do {
let myModel= try decoder.decode(MyModel.self, from: jsonData)
} catch {
print(error.localizedDescription)
}
最后,您可以通过解码的对象访问所需的数据。例如 :
let anArrayOfStringsOfMices = myModel.animals.mice
推荐阅读
- python - 如何在树莓派 3 上实现软件 uart
- java - servlet在tomcat上同时处理多个请求
- xamarin - Apk 文件不适用于 xamarin 表单 Android 中启用的 proguard
- google-cloud-platform - 从 Bigquery 中的行创建新列
- php - 用户多进程
- linux - 给定的shell命令有什么区别
- javascript - 单击时打开 v-date-picker v-menu 并将 v-text-field 聚焦在其中?
- amazon-web-services - 有没有办法在 aws cli 配置文件中指定 --endpoint-url
- r - 使用R时python中的子集问题
- ios - NavigationBar 的类别适用于 Xcode9,但不适用于 Xcode10