首页 > 解决方案 > Alamofire POST 请求替换输出中的字符

问题描述

我提出这个要求:

Alamofire.request(path,method:.post, parameters:params, encoding: JSONEncoding.default,headers:headers).responseJSON { response in
print("Result: \(response.result.value)"
do {
self.list = try JSONDecoder().decode([list].self, from: result!) for event in self.lists {
print(event.title," : ",event.description)
}

} catch let parseError as NSError {
print("JSON Error \(parseError.localizedDescription)")
}
}

应该看起来像这样的数据(JSON?) - Postman 输出,此处未包含的所有字段:

{
"start": "2016-02-01 11:30:00",
"end": "2016-02-01 14:42:24",
"id": 3192,
"ownership": false,
}

在 XCode 中打印出来是这样的:

{
start = "2016-02-01 11:30:00";
end = "2016-04-14 20:30:00";
"id" = 3192;
ownership = 0;
}

结果:我无法使用 JSONDecoder 解析它,错误:

“无法读取数据,因为它的格式不正确”。

Swift 的新手......所以,提前感谢您的帮助!

编辑:为了清楚起见,编辑了更多信息。再次感谢!

标签: swiftalamofire

解决方案


Alamofire 不是“替换输出中的字符”,它为您提供了一个与您期望的对象不同的对象。如果您打印出您的类型,您response.result应该会对您可能会得到的结果感到惊讶NSDictionary。我们值得信赖的朋友print(...)很乐意将其转换为String您传递的任何内容的表示,但您不太可能能够使用它来解析它,JSONDecoder因为它不是 Data(这是解码器所期望的)。

正如我之前所说:使用responseString以获取响应并将其转换为适合Data解析的使用JSONDecoder. 为了能够正确控制此过程,您希望将您的Codable导数包含在问题中,并且您可能会在JSONDecoder.

如果没有您struct的响应和一些格式正确的 JSON(好吧,如果它相当完整,Postman 会这样做),我们不太可能能够为您提供任何进一步的帮助。

PS:通过编辑完全改变你的问题并不是一个好主意。您最好发布一个新问题并在旧问题上留下带有指向它的指针的评论,这样人们重新访问它可能会被引导到正确的地方。如果您更新您的问题,您通常应该保留旧问题并使用附加信息对其进行修改,以保持现有讨论的相关性。


推荐阅读