如何使用实体创建JSON以在Swift3 iOS中发布?

如何使用实体创建JSON以在Swift3 iOS中发布?,ios,json,post,swift3,httprequest,Ios,Json,Post,Swift3,Httprequest,我刚接触Swift编程。我必须使用Swift3中的httpRequest向服务器发送以下JSON请求 { "CompanyId": 162, "RollupYear": 2018, "UserId": 1609, "datarollup": [{ "Name": "Thank You Cards", "RollupYear": 2018, "DataRollupColumnID": 210,

我刚接触Swift编程。我必须使用Swift3中的httpRequest向服务器发送以下JSON请求

{
    "CompanyId": 162,
    "RollupYear": 2018,
    "UserId": 1609,
    "datarollup": [{
            "Name": "Thank You Cards",
            "RollupYear": 2018,
            "DataRollupColumnID": 210,
            "CurrentValue": 520
        },
        {
            "Name": "Prospecting Calls",
            "RollupYear": 2018,
            "DataRollupColumnID": 212,
            "CurrentValue": 1300
        }
    ],
    "Seasonalitylist": [{
            "CompanyPeriodId": 386,
            "UserId": 1609,
            "Seasonality": 25
        },
        {
            "CompanyPeriodId": 387,
            "UserId": 1609,
            "Seasonality": 25
        }
    ]
}
因此,为了以这种格式发送JSON,我创建了一个名为“RequestModel”的实体类:

import Foundation

class RequestModel {

    var CompanyId: Int? = 0
    var RollupYear: Int? = 0
    var UserId: Int? = 0

    var dataRollupArr = NSMutableArray()
    var seasonalityArr = NSMutableArray() 
}

class DataRollupModel {
    var Name: String? = ""
    var CurrentValue: Float? = 0.0
    var RollupYear: Int? = 0
    var DataRollupColumnID: Int? = 0
}

class SeasonalityModel {

    var CompanyPeriodId: Int? = 0
    var UserId: Int? = 0
    var Seasonality: Int? = 0 
}
我有我所有的值,有人能建议我如何将我的实体值添加到所需的JSON中吗

注:

以下是我向服务器发送JSON请求以进行登录的代码:

func login(email:String, password:String, completion:@escaping (NSDictionary) -> ()) {
        if let url = NSURL(string: baseurl+"login") {
            let request = NSMutableURLRequest( url: url as URL)

            let signInDict = ["UserName":email,"Password":password]

            print(signInDict)

            let jsonData = try! JSONSerialization.data(withJSONObject: signInDict, options: JSONSerialization.WritingOptions.init(rawValue: 0))

            request.httpMethod = "POST"

            request.setValue("application/json", forHTTPHeaderField: "Content-Type")
            request.setValue("732rguiqfw9237ryu4k2141", forHTTPHeaderField: "KEY")

            request.httpBody = jsonData
            let task = URLSession.shared.dataTask(with: request as URLRequest) {
                data, response, error in
                do{
                    if let data = data,
                        let jsonString =  try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
                        , error == nil {
                        completion(jsonString)
                    } else {
                        print("error=\(error!.localizedDescription)")
                        let errorDict = ["error_status":true,"message":error!.localizedDescription] as [String : Any]
                        completion(errorDict as NSDictionary)

                    }
                }
                catch{
                    print("error=\(error.localizedDescription)")
                    let errorDict = ["error_status":true,"message":error.localizedDescription] as [String : Any]
                    completion(errorDict as NSDictionary)

                }

            }
            task.resume()
        }
    }

首先,你们不必创建对象,若你们已经有了一个数据字典,你们可以直接将它转换成json

我建议您使用对象映射器,因为如果您仍然想使用对象模型,这是最简单的方法


继承可映射类的结构或对象它们具有将对象转换为jsonString或dictionary的直接功能首先,您不必创建对象,如果您已经有数据字典,您可以直接将其转换为json

我建议您使用对象映射器,因为如果您仍然想使用对象模型,这是最简单的方法


继承可映射类的结构或对象具有直接功能,可使用Swift 4Codable#simple等将对象转换为jsonString或字典

class RequestModel: Codable {

    var CompanyId: Int? = 0
    var RollupYear: Int? = 0
    var UserId: Int? = 0

    var datarollup = [DataRollupModel]()
    var Seasonalitylist = [SeasonalityModel]()

    class DataRollupModel: Codable {
        var Name: String? = ""
        var currentValue: Float? = 0.0
        var RollupYear: Int? = 0
        var DataRollupColumnID: Int? = 0
        var CurrentValue: Int? = 0
    }

    class SeasonalityModel: Codable {

        var CompanyPeriodId: Int? = 0
        var UserId: Int? = 0
        var Seasonality: Int? = 0
    }

}

extension Encodable {
    func toJSONData() -> Data? {
        return try? JSONEncoder().encode(self)
    }
}
使用


使用Swift 4可编码#简单类似

class RequestModel: Codable {

    var CompanyId: Int? = 0
    var RollupYear: Int? = 0
    var UserId: Int? = 0

    var datarollup = [DataRollupModel]()
    var Seasonalitylist = [SeasonalityModel]()

    class DataRollupModel: Codable {
        var Name: String? = ""
        var currentValue: Float? = 0.0
        var RollupYear: Int? = 0
        var DataRollupColumnID: Int? = 0
        var CurrentValue: Int? = 0
    }

    class SeasonalityModel: Codable {

        var CompanyPeriodId: Int? = 0
        var UserId: Int? = 0
        var Seasonality: Int? = 0
    }

}

extension Encodable {
    func toJSONData() -> Data? {
        return try? JSONEncoder().encode(self)
    }
}
使用


不要在SWIFT中使用NSStuff不要在SWIFT中使用NSStuff谢谢你的建议@Kunal,你能为我的模态和JSON分享一些代码吗?谢谢你的建议@Kunal,你能为我的模态和JSON分享一些代码吗?谢谢你的时间@SPatel请查看我的编辑,我想知道我有所有的值。您能告诉我如何将我的值传递给此模式吗?谢谢您的时间@SPatel请查看我的编辑,我想知道我对所有人都有值。你能告诉我如何将我的值传递给这个模型吗。