SwiftyJSON是一个非常有用的Swift附加组件,可以通过各种方法导入(CocoaPods,Carthage等),我在很多项目中使用它,因为它们通常需要JSON文件。所以我想要一个很好的简单函数,我可以调用必要的参数并从我的JSON文件中获取我的原始String值。
答案 0 :(得分:1)
步骤1.我们将创建一个协议,其中包含一个构造函数方法和Model类
protocol JSONable {
init?(parameter: JSON)
}
class Style: JSONable {
let ID :String!
let name :String!
required init(parameter: JSON) {
ID = parameter["id"].stringValue
name = parameter["name"].stringValue
}
/* JSON response format
{
"status": true,
"message": "",
"data": [
{
"id": 1,
"name": "Style 1"
},
{
"id": 2,
"name": "Style 2"
},
{
"id": 3,
"name": "Style 3"
}
]
}
*/
}
步骤2.我们将创建JSON的扩展,它将JSON转换为模型类类型对象
extension JSON {
func to<T>(type: T?) -> Any? {
if let baseObj = type as? JSONable.Type {
if self.type == .array {
var arrObject: [Any] = []
for obj in self.arrayValue {
let object = baseObj.init(parameter: obj)
arrObject.append(object!)
}
return arrObject
} else {
let object = baseObj.init(parameter: self)
return object!
}
}
return nil
}
}
步骤3.将代码与Alamofire或其他代码一起使用。
Alamofire.request(.GET, url).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
var styles: [Style] = []
if let styleArr = json["data"].to(type: Style.self) {
styles = styleArr as! [Style]
}
print("styles: \(styles)")
case .failure(let error):
print(error)
}
}
我希望这会有用。
有关此内容的更多信息,请参阅此链接 https://github.com/SwiftyJSON/SwiftyJSON/issues/714
答案 1 :(得分:0)
这是我创建的函数,您可以自己使用它(当然需要将SwiftJSON正确地集成到您的Xcode Swift项目中)...
func getJSON(value: [String], fileName: String) -> String{
guard let path = Bundle.main.path(forResource: fileName, ofType: "json"),
let jsonData = NSData(contentsOfFile: path) else{
print("Couldn't find the file on disk or failed to read it")
return "ERR."
}
let jsonObject = JSON(data: jsonData as Data)
guard let jsonValue = jsonObject[value].string else{
print("FAILED to find JSON object")
return "ERR."
}
return jsonValue
}
此函数的一个示例用法是let myJsonValue = getJSON(value: ["people","person1"], fileName: "database")
,它将从名为数据库的JSON文件中的 people 组中获取值 person1 。 JSON 。所以,如果database.json
文件看起来像这样
{
"people" : {
"person1" : "Bob",
"person2" : "Steve",
"person3" : "Alan",
}
}
该函数将返回值"Bob"
希望这对任何人都有帮助,或者如果您对此有任何建议,请告诉我们!建设性批评总是受到赞赏。