我在构造参数时遇到了一些麻烦,以便我们的服务器API能够将其作为有效的JSON读取。
Alamofire在swift语言中使用这样的参数
let parameters : [String: AnyObject] =
[
"string": str
"params": HOW I INSERT A VALID JSON ARRAY HERE
]
问题是AnyObject似乎不接受JSON所以如何使用swift发送/创建这样的结构?
{
"string": str, "params" : [
{
"param1" : "something",
"param2" : 1,
"param3" : 2,
"param" : false
},
{
"param1" : "something",
"param2" : 1,
"param3" : 2,
"param" : false
}]
}
答案 0 :(得分:5)
取自Alamofire的GitHub页面:
let parameters = [
"foo": [1,2,3],
"bar": [
"baz": "qux"
]
]
Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters, encoding: .JSON)
// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}
编辑:从你的例子:
let parameters = [
"string": "str",
"params": [[
"param1" : "something",
"param2" : 1,
"param3" : 2,
"param" : false
],[
"param1" : "something",
"param2" : 1,
"param3" : 2,
"param" : false
]
]
]
答案 1 :(得分:1)
我自己解决了这个问题。我可以做到
parameters =
[
"params": array
]
其中数组是Dictionary(String,AnyObject)。我最初使用这个解决方案的问题是你不能将布尔值插入这种字典中,它们只会被转换成整数。但显然alamofire JSON编码(我认为)仍将它们作为真/假值发送。
答案 2 :(得分:0)
您需要为数组参数创建一个NSArray对象。
var yourParameters = [
"String": "a string",
"Int": 1,
"Array": NSArray(
array: [
"a", "b", "c"
])
]
答案 3 :(得分:0)
Swift 2.2并使用SwiftyJSON.swift
你可以这样使用。
var arrayList : [String: AnyObject]//one item of array
var list: [JSON] = []//data array
for i in 0..<10//loop if you need
{
arrayList = [
"param1":"",
"param1":"",
"param2":["","",""]
]
list.append(JSON(arrayList))//append to your list
}
//params
let params: [String : AnyObject]=[
"Id":"3456291",
"List":"\(list)"//set
]
答案 4 :(得分:0)
如果需要直接传递数组作为alamofire请求的参数,以下方法对我有效。
来源:https://github.com/Alamofire/Alamofire/issues/1508
let headers = NetworkManager.sharedInstance.headers
var urlRequest = URLRequest(url: URL(string: (ServerURL + Api))!)
urlRequest.httpMethod = "post"
urlRequest.allHTTPHeaderFields = headers
let jsonArrayencoding = JSONDocumentArrayEncoding(array: documents)
let jsonAryEncodedRequest = try? jsonArrayencoding.encode(urlRequest, with: nil)
var request: Alamofire.DataRequest? = customAlamofireManager.request(jsonAryEncodedRequest!)
request?.validate{request, response, data in
return .success
}
.responseJSON {
答案 5 :(得分:0)
使用Swift 5 您可以这样使用。
var authParams:[String:Any] = [:]
var authParamsObject:[String:Any] = [:]
authParamsObject["is_urgent"] = data_any
authParamsObject["body"] = data_any
authParams = ["note_set" : [authParamsObject]]
Json结果:
{
"note_set": [
{
"is_urgent": true,
"body": "string"
}
]
}
答案 6 :(得分:0)
就我而言。
let query = "blm"
let allCountriesParameter = ["country": "*"]
let jsonObject: [String: Any] = ["query": query, "locations": [allCountriesParameter]]
let httpBody = try JSONSerialization.data(withJSONObject: jsonObject)
看起来如何。
print(String(data: httpBody, encoding: .utf8))
{
"query":"blm",
"locations":[
{
"country":"*"
}
]
}
答案 7 :(得分:-1)
如果你使用的是SwiftyJSON,你可以像这样写
let array = ["2010-12-13T5:03:20","2010-12-13T5:03:20"]
let paramsJSON = JSON(array)
var arrString = paramsJSON.rawString(NSUTF8StringEncoding)