¿Cómo puedo usar matrices JSON con Alamofire parámetros?

Estoy teniendo un poco de problemas para la estructuración de mis parámetros, de forma que nuestro servidor API sería capaz de leer como válido JSON.

Alamofire utiliza parámetros como este en swift idioma

let parameters : [String: AnyObject] =
[
    "string": str
    "params": HOW I INSERT A VALID JSON ARRAY HERE
]

El problema es que AnyObject no parece aceptar JSON es así ¿cómo puedo enviar /crear una estructura como esta con swift?

{
"string": str, "params" : [
    {
        "param1" : "something",
        "param2" : 1,
        "param3" : 2,
        "param" : false
    },
    {
        "param1" : "something",
        "param2" : 1,
        "param3" : 2,
        "param" : false
    }]
}
Lo que usted está llamando a un «JSON array» aquí es sólo un conjunto de diccionarios. No es JSON hasta Alamofire codifica en JSON para la solicitud.

OriginalEl autor Miika Pakarinen | 2015-05-22

6 Kommentare

  1. 5

    Tomado de Alamofire‘s página de 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"}}

    EDIT: Y de su ejemplo:

    let parameters = [
        "string": "str",
    "params": [[
        "param1" : "something",
        "param2" : 1,
        "param3" : 2,
        "param" : false
    ],[
        "param1" : "something",
        "param2" : 1,
        "param3" : 2,
        "param" : false
    ]
    ]
    ]
    Esta no es exactamente la respuesta a mi pregunta. No es como si yo voy a codificar el JSON en los parámetros. Bar en ese ejemplo también es un Diccionario que AnyObject no acepta, no un array de JSON.
    Para la edición: Correcto, tipo de pero todavía tengo que insertar el «params» como un objeto, no un código rígido de la estructura.
    Si el valor es rígida o construidos de otra manera es irrelevante.
    Muchas gracias!
    esta es la respuesta correcta!

    OriginalEl autor Lior Pollak

  2. 1

    Resuelto esto a mí mismo. Sólo puedo hacer

        parameters =
        [
            "params": array
        ]

    Donde la matriz es un Diccionario (Cadena, AnyObject). El problema que yo tenía inicialmente con esta solución fue que no se puede insertar booleanos en este tipo de diccionario, se acaba de convertir en números enteros. Pero al parecer alamofire codificación JSON (creo) les envía como valores verdadero/falso, sin embargo.

    OriginalEl autor Miika Pakarinen

  3. 0

    Usted necesita para crear un NSArray objeto de una matriz de parámetros.

    var yourParameters = [
      "String": "a string",
      "Int": 1,
      "Array": NSArray(
        array: [
            "a", "b", "c"
        ])
    ]

    OriginalEl autor Fuping

  4. 0

    Swift 2.2 y el uso de SwiftyJSON.swift

    Se puede utilizar como este.

        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
        ]

    OriginalEl autor idris yıldız

  5. 0

    En el caso, no es necesario pasar la matriz directamente como parámetro para un alamofire solicitud, el siguiente método ha funcionado para mí.

    fuente: 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 {

    OriginalEl autor Nithin Haridas

  6. -1

    si usted está usando SwiftyJSON, usted puede escribir como este

    let array = ["2010-12-13T5:03:20","2010-12-13T5:03:20"]
     let paramsJSON = JSON(array)
     var arrString = paramsJSON.rawString(NSUTF8StringEncoding)

    OriginalEl autor Rinku

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea