测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最后发布 | 2017年9月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✓ |
由 Mukesh Yadav 维护。
服务器按照黑白格式发送所有 JSON 数据,即全部是字符串。我们费尽全力将它们转换成我们模型类中的相应数据类型。
现在,在服务器数据和我们的代码之间出现了 JSONParserSwift
框架,它可以神奇地将这些字符串转换为与我们的模型类相对应的所需数据类型,而无需编写任何代码。
JSONParserSwift 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "JSONParserSwift"
要将任何 JSON 字符串或字典解析到模型中,您必须创建一个类并通过 ParsableModel
继承它。现在您需要在模型类中创建属性。您可以使用与 JSON 字符串中键相同的名称或不同的名称创建这些属性。如果您声明与 JSON 中键相同的名称的属性,则需要声明仅属性。但如果您想要将属性和键的名称不同,则必须遵守协议 JSONKeyCoder
并实现方法 func key(for key: String) -> String?
如果您需要解析以下 JSON 字符串
{
"responseStatus": {
"statusCode": 101,
"message": "Error Message"
},
"responseData": {
"employeeId": 1002,
"employeeName": "Demo Employee",
"employeeEmail": "[email protected]",
"employeeDepartment": "IT"
}
}
您需要创建以下模型
class BaseResponse: ParsableModel {
var responseStatus: ResponseStatus?
var responseData: Employee?
}
class ResponseStatus: ParsableModel {
var statusCode: NSNumber?
var message: String?
}
class Employee: ParsableModel {
var employeeId: NSNumber?
var employeeName: String?
var employeeEmail: String?
var employeeDepartment: String?
}
现在,要解析 JSON,只需调用以下方法
do {
let baseResponse: BaseResponse = try JSONParserSwift.parse(string: jsonString)
// Use base response object here
} catch {
print(error)
}
模型可以引用其他模型的引用(这些模型是 ParsableModel
的子类),或者可以包含模型的 Array
。
要获取对象的 JSON 字符串,只需调用 JSONParserSwift.getJSON(object: NSObject)
方法来获取 JSON。
如果您想要不同的键和属性名称,则遵守协议 JSONKeyCoder
并实现其方法 key(for key: String) -> String?
,如下所示
class TestModel: JSONKeyCoder {
var test: String?
var number: Double = 0
var boolValue: Bool = false
var anotherTest: TestModel?
var array: [TestModel]?
public func key(for key: String) -> String? {
switch key {
case "boolValue": // Properties name
return "bool_value" // Key in response
case "anotherTest":
return "another_key"
default:
return nil
}
}
}
如果您想将模型对象转换为 JSON 字符串,则调用以下方法 getJSON
// Prepare Test Model
let testModel: TestModel = TestModel()
testModel.test = "xyz"
testModel.number = 10.0
testModel.boolValue = true
let anotherTestModel = TestModel()
anotherTestModel.test = "abc"
anotherTestModel.number = 23
anotherTestModel.boolValue = false
testModel.anotherTest = anotherTestModel
testModel.array = [anotherTestModel]
do {
// Convert into json string
let jsonString = try JSONParserSwift.getJSON(object: testModel)
print("Json String : \(jsonString)")
} catch {
print(error)
}
上述代码的 JSON 字符串将是
{
"bool_value":true,
"number":10,
"test":"xyz",
"array":[
{
"bool_value":false,
"number":23,
"test":"abc",
"array": null,
"another_key": null
}
],
"another_key": {
"bool_value":false,
"number":23,
"test":"abc",
"array": null,
"another_key": null
}
}
注意:当前版本不支持 Int 和 Optional 类型的 Array。因此,请使用 NSNumber 处理与数字相关的数据。
还可以查看参与此项目的贡献者列表。
JSONParserSwift 采用 MIT 许可协议。更多信息请参阅 LICENSE 文件。