Swift - Create data model from JSON response

我只是一个虾纸丫 提交于 2019-12-02 19:34:59

I recommend using code generation to generate models in Swift based on JSON. To that end, I've created a tool at http://www.guideluxe.com/JsonToSwift to make modeling and parsing JSON as easy as possible.

After you've submited a sample JSON object with a class name to the tool, it will generate a corresponding Swift class, as well as any needed subsidiary Swift classes, to represent the structure implied by the sample JSON. Also included are class methods used to populate Swift objects, including one that utilizes the NSJSONSerialization.JSONObjectWithData method. The necessary mappings from the NSArray and NSDictionary objects are provided.

After copying the generated code into your project as a Swift class(es), you only need to supply an NSData object containing JSON that matches the sample provided to the tool.

Other than Foundation, there are no dependencies.

Here's how to create an NSData object from a JSON file to test with.

let fileUrl: NSURL = NSBundle.mainBundle().URLForResource("JsonFile", withExtension: "json")!
let jsonData: NSData = NSData(contentsOfURL: fileUrl)!

I would suggest using SwiftyJSONModel there your model would look something like:

import SwiftyJSONModel

class User: NSObject, JSONObjectInitializable {
    enum PropertyKey : String {
        case user_token, email
    }

    var user_token:String?
    var email:String?

    required init(object: JSONObject<PropertyKey>) throws {
        user_token = object.value(for: .user_token)
        email = object.value(for: .email)
    }
}

This library has 3 nice things:

  1. You don't have to explicitly cast to String as library will infer the type
  2. You can have non-optional properties and library will tell you which exact field was wrong
  3. All the keys to the model are incapsulated in enum which gives you auto-complition when you type the keys and guarantees that you cannot access keys, that are not in enum

Here is some example code for Model Class and parsing JSON response with out any library.

Model Class

class User: NSObject{
     var user_token: String = ""
     var email: String = ""
}

Example code to call web-service api and Parsing.

NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
                var err: NSError
                var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
                //println("Result : \(jsonResult)")
                let model = User()
            model. user_token = jsonResult["user_token"] as NSString
            model. email = jsonResult["email"] as NSString
            })

I'm using jsoncafe easiest and customizable template base model class generator with different framwroks like SwiftyJSON, Codable, Gloss, Simple Swift Class even you can make your own template

jsoncafe.com

If you want a more rigorous approach and have access to JSON schemas as meta description for your JSON documents, I wrote a code generator which can handle those (JSON schema, draft 4):

https://github.com/werner77/MappableObjectGenerator

My tools supports basically any programming language, because it is based on code generation templates, but is focussed on ObjectiveC and Swift 4 support right now.

May be its too late.

You can also try using the link http://www.json4swift.com/results.php Where in you just need to paste the JSON values and it gives you the swift files instead.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!