Estoy tratando de hacer una solicitud de publicación con un cuerpo en Swift usando Alamofire.
mi cuerpo json se ve así:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
Estoy tratando de hacer let
list
con NSDictionnary que se parece a:
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
y mi solicitud usando Alamofire se ve así:
Alamofire.request(.POST, "http://myserver.com", parameters: ["IdQuiz":"102","IdUser":"iOSclient","User":"iOSClient","List":list ], encoding: .JSON)
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
La solicitud tiene un error y creo que el problema está en la lista del Diccionario, porque si hago una solicitud sin la lista, funciona bien, ¿alguna idea?
He probado la solución sugerida pero me enfrento al mismo problema:
let json = ["List":list,"IdQuiz":"102","IdUser":"iOSclient","UserInformation":"iOSClient"]
let data = NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted,error:nil)
let jsons = NSString(data: data!, encoding: NSUTF8StringEncoding)
Alamofire.request(.POST, "http://myserver.com", parameters: [:], encoding: .Custom({
(convertible, params) in
var mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
mutableRequest.HTTPBody = jsons!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
return (mutableRequest, nil)
}))
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Respuestas:
Estás cerca. El formato del diccionario de parámetros no parece correcto. Deberías probar lo siguiente:
Con suerte, eso solucionó tu problema. Si no es así, responda y ajustaré mi respuesta en consecuencia.
fuente
nil
aAnyObject
?Si está utilizando Alamofire v4.0 +, la respuesta aceptada se vería así:
fuente
JSONEncoding
desambiguar al tipo que lo hizo por mí.No me gusta ninguna de las otras respuestas hasta el momento (excepto quizás el uno por SwiftDeveloper), ya sea porque requieren que deserializar su JSON, sólo para que pueda ser serializado de nuevo, o la atención acerca de la estructura de la propia JSON.
La respuesta correcta ha sido publicada por afrodev en otra pregunta. Deberías ir y votarlo.
A continuación se muestra solo mi adaptación, con algunos cambios menores (principalmente juego de caracteres UTF-8 explícito).
fuente
toJSONString
no es un método nativo, por lo que básicamente es una caja negra que debes implementar. Dos, la respuesta que da, proporciona una varjson
que comienza como una cadena json, de manera realista, nadie tiene los parámetros de esa manera, a menos que los esté convirtiendo y almacenando localmente de esa manera.toJSONString
en mi respuesta, 2) "de manera realista, nadie tiene los parámetros de esa manera" - eso es hacer muchas suposiciones; el JSON puede provenir de partes bastante diferentes de la aplicación, no relacionadas con la realización de la solicitud, y de las cuales el código de red no sabe nada.Xcode 8.X, Swift 3.X
Fácil uso;
fuente
Si está utilizando
swift4
yAlamofire v4.0
el código aceptado se vería así:fuente
Respuesta aceptada en Xcode 11 - Swift 5 - Alamofire 5.0
fuente
He editado un poco la respuesta de SwiftDeveloper porque no me funcionaba. También agregué la validación de Alamofire.
fuente
Hay algunos cambios que me gustaría notificar. Puede acceder a la solicitud, JSON, error del objeto de respuesta a partir de ahora.
fuente
fuente
Así es como creé la solicitud Http POST con rapidez que necesita parámetros con codificación Json y con encabezados.
Se creó el cliente API BKCAPIClient como una instancia compartida que incluirá todo tipo de solicitudes como POST, GET, PUT, DELETE, etc.
Clase de operación creada que contiene todos los datos necesarios para una solicitud particular y también contiene lógica de análisis dentro del bloque de finalización.
Llame a la API en cualquier controlador de vista donde necesitemos estos datos
fuente
fuente
Si alguien se pregunta cómo proceder con los modelos y demás, consulte a continuación
fuente
Alamofire ~ 5.2 y Swift 5
Puede estructurar los datos de sus parámetros
Trabajar con fake json api
fuente