如何将我的类对象转换为 JSON for Alamofire
Posted
技术标签:
【中文标题】如何将我的类对象转换为 JSON for Alamofire【英文标题】:How do I convert my class object into JSON for Alamofire 【发布时间】:2019-02-18 17:20:05 【问题描述】:编辑:2019 年 2 月 19 日 我尝试了提供的解决方案。我选择了一个更简单的选项,将字典作为参数传递并使用 Alamofire 的 JSONEncoder 将其转换为 JSON 对象。这是我尝试的第一件事,但问题是感谢大家的帮助。
我想将一个类对象发布到一个 api,但我正在努力处理类型并将其编码为 JSON。
let jsonData = try JSONEncoder().encode(classObject)
let params = String(data: jsonData, encoding: .utf8)
Alamofire.request(shopSubmitURL, method: .post, parameters: params).responseString response in
switch(response.result)
case .success(_) :
if let data = response.result.value
print("Successfully submitted class object: \(response.result.value)")
break
case .failure(_):
print(response.result.error)
break
而我的 classObject 是这样设置的:
class classObject: NSObject, Codable
var name : String = ""
var items : Array = [Int]()
我尝试将对象转换为带有扩展名的字典,但是当我这样做时,我必须使用“Any”或“AnyObject”,这会导致“无法推断通用参数”错误。
目前我收到“调用中的额外参数“方法”错误。
【问题讨论】:
Turn swift object into a JSON string的可能重复 该错误必须与您的 Alamofire 调用有关,而不是 json 编码 Josh - 我认为这可能有答案,但我使用的是 swift 4,目前尚不清楚我是否应该使用 JSONserialisation 或其他方法。 Joakim - 只要参数不是合适的 JSON 对象,我就会收到 Alamofire 错误。我正在努力从我的类对象中创建正确的 JSON 对象。 【参考方案1】:让我们仔细观察:
AF.request(url: URLConvertible, method: HTTPMethod, parameters: Parameters?, encoding: ParameterEncoding, headers: HTTPHeaders?)
在 Alamofire 来源中,您可以看到 public typealias Parameters = [String: Any]
表示你需要像这样使用它
AF.request("https://somewhere.com", method: .post, parameters: ["name":"Name", "items":[1,2,3,4]], encoding: JSONEncoding.default, headers: [/*headers if need, also Map*/])
【讨论】:
【参考方案2】:正如乔希所说,这个问题已经得到解答。但为了方便您,我会推荐几件事。
首先我建议您使用struct
而不是类。 learn more
其次,您可能只需要一个简单的codable
对象,如下所示。
struct classObject: Codable
let name : String
let items : [Int]
// CodingKeys are used to map with json keys
enum CodingKeys: String, CodingKey
case name = "name"
case items = "itemsArr"
推荐链接CodingKeys
【讨论】:
以上是关于如何将我的类对象转换为 JSON for Alamofire的主要内容,如果未能解决你的问题,请参考以下文章