我有一个序列化程序方法,可以将我的 swift 对象转换为字典,以便我可以在 http 请求中发送它们。
这个特殊的方法是给我带来问题的方法
class func toDictionary ( _ order: Order ) -> Dictionary<String, Any> {
return [
"products" : NSArray(array:order.getProducts()),
"owning_user" : NSString(string: order.getOwningUser()),
"restaurant" : NSString(string: order.getRestaurantId())
]
}
order.getProducts() 返回一个 [String] 类型的数组
当我在 http 请求中发送它时,它被发送为
{"products[]":["...","..."],
"restaurant":"sdfsdf"
}
显然,我的服务器期望产品作为键,因此它没有获得正确的值。
知道为什么要添加方括号吗?
注意:
我的 http 请求是通过 alamofire 完成的
编辑:
原来是 alamofire 的问题
请看下面的解决方案
最佳答案
事实证明,当将字典作为 httpBody 传递时,这是一个与 alamofire 编码有关的问题。
遇到同样问题的人:
通过将以下属性添加到您的 Alamofire 发布请求来解决此问题
encoing: JSONEncoding.default
最终请求如下所示
Alamofire.request( requestURL, method: .post, parameters: orderJson, encoding: JSONEncoding.default)
它会生成以下正在发布的 JSON
{ restaurant: '580e33ee65b84973ffbc7beb',
products: [ '580f5cdafaa1067e55be696d' ],
owning_user: '580e2d174e93b0734e9a04cb'
}
正如我最初想要的那样。
关于ios - Swift Dictionary 在键后为 [String] 类型的值添加方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725926/