私はすぐに簡単なPOSTリクエストをしようとしています。オブジェクト(アラーム)の配列をポストしたいと思います。ここで私はこれまで持っているものです。AlamofireとEVReflectionのJSON POSTリクエスト
func submitAlarms(alarms: [Alarm],onCompletion: @escaping ([Alarm]) -> Void){
let route = baseURL
let token = SessionManager().storedSession!.token.idToken
let headers = [
"Authorization": "Bearer \(token)"
]
let parameters = [
"alarms": alarms.toJsonString()]
print("Parameters ", parameters)
Alamofire.request(route, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseJSON{ response in
switch response.result{
case .failure(let error):
print("POST Alarm JSON Error: \(error)")
case .success(let value):
let json = JSON(value)
let alarms_json = json["alarms"]
print(alarms_json)
let alarms_string = alarms_json.rawString()
let alarms: [Alarm] = [Alarm](json: alarms_string)
//let alarms = [Alarm](json: res_string)
onCompletion(alarms)
}
}
}
I "mは主にどのような理由のために、Alamofireは、オブジェクトの配列を取るように見えることはできませんparameters
部分で問題を抱えて、私はトップで辞書を作成しました。アラームの配列を保持レベルalarm
キー私は、JSON文字列に私のアラーム配列を変換するEVReflectionを使用しますが、その変換は私にこれを与える:。。
Parameters ["alarms": "[\n{\n \"isActive\" : true,\n \"volume\" : 10,\n \"minute\" : 15,\n \"days\" : [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6\n ],\n \"brightness\" : 10,\n \"hour\" : 6,\n \"audio\" : 4,\n \"duration\" : 1,\n \"label\" : \"Alarm\",\n \"allowSnooze\" : false,\n \"isSynchronized\" : false\n}\n]"]
はどこにすべてのこれらの余分な\
と\n
から来ている使用していますか? Alamofire、これらの余分な部分がそれをinvalにするので、サーバーは400で応答しますid JSON。私はここで何が欠けていますか?最新のAlamofireとEVReflectionを使ってXcode 8/Swift 3を使用しています。私は他の例を見てきましたが、ほとんどのものは古くなっています。それらの多くは拡張機能やカスタムエンコーディングも使用していますが、そのような単純な要求にはばかげています。よくあなたがやっているパラメータの作成については
はい、私は実際にはアラームオブジェクトの配列を含む完全な辞書ですが、1つの項目と1つのjsonの文字列で辞書を作成していることに同意します。 Alamofireはそれをjsonに適切にエンコードします。toDictionaryは本当に奇妙な結果をもたらしましたが、私はそれに多くの時間を費やしていません。私はリンクをチェックアウトします、ありがとう – 7200rpm
あなたはその他の辞書に辞書を追加していないことを確認してください。 .toDictionary()を実行し、それをパラメータに入れてください。 –