如何将JSON数组与Alamofire参数一起使用?

时间:2015-05-22 10:17:25

标签: swift alamofire

我在构造参数时遇到了一些麻烦,以便我们的服务器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
    }]
}

8 个答案:

答案 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)