繁体   English   中英

如何在Swift3 iOS中使用Entity to POST创建JSON?

[英]How to create JSON using Entity to POST in Swift3 iOS?

我刚接触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 
}

我拥有所有值,谁能建议我如何将Entity值添加到所需的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或字典

使用Swift 4 Codable#simple

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)
    }
}

采用

let instance = RequestModel()
let jsonData = instance.toJSONData()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM