简单的 getJSON() 函数

Posted

技术标签:

【中文标题】简单的 getJSON() 函数【英文标题】:Simple getJSON() function 【发布时间】:2016-11-07 20:09:03 【问题描述】:

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

【问题讨论】:

【参考方案1】:

第一步。我们将创建一个协议,其中包含一个构造方法和模型类

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

【讨论】:

【参考方案2】:

这是我创建的函数,您可以自己使用(当然需要将 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"),它将从名为 database.jsonpeople 组中获取值 person1 /em>。所以,如果database.json 文件看起来像这样


    "people" : 
        "person1" : "Bob",
        "person2" : "Steve",
        "person3" : "Alan",
    

该函数将返回一个值"Bob"

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

【讨论】:

以上是关于简单的 getJSON() 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 $.getJSON 函数返回变量

$.getJSON 函数期间设置的变量只能在函数内访问

如何从 $.getJSON 调用以 print_r() 方式打印关联数组?

$.getJSON 中的函数参数如何工作?

$.getJSON() 回调函数没有执行的原因

JSONP 的 getJSON 回调有啥意义?