サーバー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
}]
}
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
]
]
]
これを自分で解決しました。私はただできる
parameters =
[
"params": array
]
配列はDictionary(String、AnyObject)です。このソリューションで私が最初に抱えていた問題は、この種の辞書にブール値を挿入できないことでした。ブール値は整数に変換されるだけです。しかし、どうやらalamofire JSONエンコーディング(私は思う)はそれにもかかわらずそれらを真/偽の値として送信します。
Swift2.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
]
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 {
配列パラメータ用のNSArrayオブジェクトを作成する必要があります。
var yourParameters = [
"String": "a string",
"Int": 1,
"Array": NSArray(
array: [
"a", "b", "c"
])
]
使用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"
}
]
}