Swift Dictionary在键之后为类型为[String]

时间:2016-11-21 17:25:11

标签: ios swift dictionary alamofire

我有一个序列化程序方法,可以将我的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

请参阅下面的解决方案

2 个答案:

答案 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"
}