Alamofire 是不是支持结构化为有序值列表的 JSON?参数为 [String: Any],仅符合名称/值对的集合
Posted
技术标签:
【中文标题】Alamofire 是不是支持结构化为有序值列表的 JSON?参数为 [String: Any],仅符合名称/值对的集合【英文标题】:Does Alamofire support JSON structured as an ordered list of values? Parameters are [String: Any], only complying to collections of name/value pairsAlamofire 是否支持结构化为有序值列表的 JSON?参数为 [String: Any],仅符合名称/值对的集合 【发布时间】:2019-07-05 04:26:07 【问题描述】:http://json.org/ 定义 JSON 建立在两个结构之上:
名称/值对的集合。在各种语言中,这是 实现为对象、记录、结构、字典、哈希表、键控 列表或关联数组。 值的有序列表。在大多数语言中,这被实现为 数组、向量、列表或序列。我找不到让 Alamofire 处理参数为 [Any] 的发布请求的方法,这是我正在使用的端点所需的格式。
错误消息实际上有点欺骗性,因为它在执行 Alamofire.request 时声明“'方法'调用中的额外参数”,但实际问题是参数值不符合要求。
【问题讨论】:
你能发一些代码吗? 我可以看看你的代码吗? 我认为您不能只发送 [Any] 类型的参数。您需要制作 [String: Any] 的键值对。这样该值就可以通过服务器端的 Key 来标识。 @Aditya 问题是服务器端并不期待一个键值对,而是一个有序的值列表。而不是 "numbers": [1,2,3,4] 服务器需要 [1,2,3,4] 这也是一个有效的 json。 【参考方案1】:Alamofire
中名为parameters
的参数需要[String: Any]
。如果你想通过 Alamofire 发送一个Array
,你可以像这样定义自定义 ParameterEncoding
struct CustomEncoding: ParameterEncoding
var _httpBody: Data?
func encode(_ urlRequest: Alamofire.URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest
var request = try URLEncoding().encode(urlRequest, with: parameters)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = _httpBody
return request
那就这样用吧
let body = ... // 'Array' converted to 'Data'
Alamofire.request(...,
method: ...,
parameters: [:],
encoding: CustomEncoding(_httpBody: body),
headers: ...)
【讨论】:
很高兴为您提供帮助以上是关于Alamofire 是不是支持结构化为有序值列表的 JSON?参数为 [String: Any],仅符合名称/值对的集合的主要内容,如果未能解决你的问题,请参考以下文章
春眠不觉晓,Redis数据类型知多少?String,List,Set,SortedSet,Hash,Bitmap,HyperLogLogs