在HTTP请求正文中传递数组

时间:2020-06-05 17:51:43

标签: swift xcode

我想在请求中传递这样的数组:

{
"ids": ["5ed7603ab05efe0004286d19", "5ed7608ab05efe0004286d1a"]
}

我确实喜欢这样,但是我不确定服务器是否按预期进行了操作

    request.httpBody = try JSONSerialization.data(withJSONObject: ids, options: .prettyPrinted)

2 个答案:

答案 0 :(得分:1)

为此,您应该使用Dictionary。方法如下:

let dictionary = ["ids": ["5ed7603ab05efe0004286d19", "5ed7608ab05efe0004286d1a"]]
request.httpBody = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)

建议:现代方法是使用JSONEncoder()。你可以用谷歌搜索,在线有很多解决方案。如果您仍在挣扎,可以在评论中询问方法,我会帮助您解决。

更新:如何在代码中实现Swift的JSONEncoder API。

let dictionary = ["ids": ["5ed7603ab05efe0004286d19", "5ed7608ab05efe0004286d1a"]]
request.httpBody = try JSONEncoder().encode(dictionary)

使用结构会更安全。方法如下:

typealias ID = String
struct MyRequestModel: Codable { var ids: [ID] }

let myRequestModel = MyRequestModel(ids: ["5ed7603ab05efe0004286d19", "5ed7608ab05efe0004286d1a"])
request.httpBody   = try JSONEncoder().encode(myRequestModel)

注意:类型别名的使用是可选的,它只会增加代码的可读性,就像JSONDecoder的用法一样。

答案 1 :(得分:0)

您可以使用JSONEncoder;

进行编码
let yourList = ["5ed7603ab05efe0004286d19", "5ed7608ab05efe0004286d1a"]

struct DataModel: Encodable {
    var ids: [String]
}

let data = DataModel(ids: yourList)
let encodedData = try! JSONEncoder().encode(data)

// JSON string value
let jsonString = String(data: encodedData, encoding: .utf8)