我有一个序列化程序方法,可以将我的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
请参阅下面的解决方案
答案 0 :(得分:2)
当将字典作为httpBody传递时,事实证明这与alamofire的编码有关。
对于遇到同样问题的人:
通过将以下属性添加到您的Alamofire帖子请求来解决此问题
encoing: JSONEncoding.default
最终请求如下所示
Alamofire.request( requestURL, method: .post, parameters: orderJson, encoding: JSONEncoding.default)
并产生以下JSON发布
{ restaurant: '580e33ee65b84973ffbc7beb',
products: [ '580f5cdafaa1067e55be696d' ],
owning_user: '580e2d174e93b0734e9a04cb'
}
正如我原本想要的那样。
答案 1 :(得分:0)
好的,这似乎在这里起作用,所以我认为我需要更多关于你做什么不同的背景。如果这解决了您的问题,请投票!谢谢! 可能的问题;你可能在另一个数组中有一个数组?如果order.getProducts()已经返回一个数组,请不要将它放在另一个数组中。另一种选择可能是.flatMap它“NSArray(array:order.getProducts())。flatMap {$ 0}”&lt;&lt;将从数组数组中生成一个数组。
//: Playground - noun: a place where people can play
import UIKit
func toDictionary () -> Dictionary<String, Any> {
return [
"products" : NSArray(array:["Paper","Pencil","Eraser"]),
"owning_user" : NSString(string: "user2976358"),
"restaurant" : NSString(string: "TacoBell")
]
}
let rValue = toDictionary()
let jsonData:Data!
do {
jsonData = try JSONSerialization.data(withJSONObject: rValue, options: .prettyPrinted)
let newString = String(data: jsonData, encoding: .utf8)
print(newString!)
} catch
{
print(error)
}
调试区域中的结果显示此
{
"restaurant" : "TacoBell",
"products" : [
"Paper",
"Pencil",
"Eraser"
],
"owning_user" : "user2976358"
}