web-dev-qa-db-ja.com

AlamofireパラメーターでJSON配列を使用するにはどうすればよいですか?

サーバー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
    }]
}
7
Miika Pakarinen

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
]
]
]
5
Lior Pollak

これを自分で解決しました。私はただできる

    parameters =
    [
        "params": array
    ]

配列はDictionary(String、AnyObject)です。このソリューションで私が最初に抱えていた問題は、この種の辞書にブール値を挿入できないことでした。ブール値は整数に変換されるだけです。しかし、どうやらalamofire JSONエンコーディング(私は思う)はそれにもかかわらずそれらを真/偽の値として送信します。

1
Miika Pakarinen

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
    ]
0
idris yıldız

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 {
0
Nithin Haridas

配列パラメータ用のNSArrayオブジェクトを作成する必要があります。

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

使用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"
    }
  ]
}
0