简单的getJSON()函数

时间:2016-11-07 20:09:04

标签: ios json swift swifty-json

SwiftyJSON是一个非常有用的Swift附加组件,可以通过各种方法导入(CocoaPods,Carthage等),我在很多项目中使用它,因为它们通常需要JSON文件。所以我想要一个很好的简单函数,我可以调用必要的参数并从我的JSON文件中获取我的原始String值。

2 个答案:

答案 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"

希望这对任何人都有帮助,或者如果您对此有任何建议,请告诉我们!建设性批评总是受到赞赏。