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七种数据类型,你都真正了解吗?

列表初始化是不是将原子初始化为零?

Python数据结构与算法---维护有序列表bisect

Python数据结构与算法---维护有序列表bisect

春眠不觉晓,Redis数据类型知多少?String,List,Set,SortedSet,Hash,Bitmap,HyperLogLogs

Alamofire 是不是支持 HTTP 流水线?