CodableJSON
Swift 中的 JSON - 应该如此。
需求
- iOS 9.0+ / macOS 10.9+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 10.2+
- Swift 5.0+
使用方法
在支持 Codable
的现代时代,我们很少需要手动处理 JSON 数据。尽管如此,有时我们可能无法提前知道其结构,但我们可以利用 Codable
使我们的工作更轻松。
例如,在加载 JSON 数据时
{
"Apple": {
"address": {
"street": "1 Infinite Loop",
"city": "Cupertino",
"state": "CA",
"zip": "95014"
},
"employees": 132000
}
}
以前
您需要进行大量类型转换以获取内部值。
guard let companies = try JSONSerialization.jsonObject(with: companiesData) as? [String: Any] else { return }
if let company = companies["Apple"] as? [String: Any],
let address = company["address"] as? [String: Any],
let city = address["city"] as? String {
print("Apple is in \(city)")
}
更改内部值也需要进行几次类型转换。
guard var companies = try JSONSerialization.jsonObject(with: companiesData) as? [String: Any] else { return }
if var apple = companies["Apple"] as? [String: Any],
var address = apple["address"] as? [String: Any] {
address["state"] = "California"
apple["address"] = address
companies["Apple"] = apple
}
使用 CodableJSON
由于JSON有固定的一组类型,因此无需以长形式执行所有这些类型转换。《CodableJSON》使用枚举来存储每个类型。借助一些辅助函数,访问JSON值现在要短得多,也更简单。
let companies = try JSONDecoder().decode(JSON.self, from: companiesData)
if let city = companies["Apple"]?["address"]?["city"]?.stringValue {
print("Apple is in \(city)")
}
您甚至可以使用可变形式来更改内部值。例如,您可以更改状态为其完整名称
var companies = try JSONDecoder().decode(JSON.self, from: companiesData)
companies["Apple"]?["address"]?["state"] = "California"
安装
CocoaPods
要使用CocoaPods将CodableJSON集成到您的Xcode项目中,请在您的Podfile
中指定它
pod 'CodableJSON'
Carthage
要使用Carthage将CodableJSON集成到您的Xcode项目中,请在您的Cartfile
中指定它
github "guykogus/CodableJSON"
Swift包管理器
您可以使用< protesting="useButtoniom">The Swift Package Manager,通过向您的Package.swift
文件添加适当的描述来安装CodableJSON
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
targets: [],
dependencies: [
.package(url: "https://github.com/guykogus/CodableJSON.git", from: "1.2.0")
]
)
接下来,将CodableJSON
添加到您的目标依赖项中,如下所示
.target(
name: "YOUR_TARGET_NAME",
dependencies: [
"CodableJSON",
]
),
然后运行swift package update
。
许可证
CodableJSON在MIT许可证下提供。有关更多信息,请参阅LICENSE文件。