【问题标题】:How to create JSON using Entity to POST in Swift3 iOS?如何使用实体创建 JSON 在 Swift3 iOS 中发布?
【发布时间】:2018-10-26 13:01:24
【问题描述】:

我是 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()
        }
    }

【问题讨论】:

  • 不要在 Swift 中使用 NSStuff

标签: ios json post swift3 httprequest


【解决方案1】:

您好,首先您不必创建对象,如果您已经有数据字典,您可以直接将其转换为 json as shown here

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

Object mapper widely used

继承可映射类的结构或对象,它们具有将对象转换为jsonString或字典的直接功能

【讨论】:

  • 感谢@Kunal 的建议,你能分享一些我的模态和 JSON 的代码吗?
【解决方案2】:

使用 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()

【讨论】:

  • 感谢您抽出宝贵时间@SPatel 请查看我的编辑,我想知道我对所有人都有价值。你能告诉我如何将我的值传递给这个 Modal。
猜你喜欢
  • 2019-12-05
  • 2021-10-10
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多