質問をご覧頂きまして、ありがとうございます。
https://hogehoge.ne.jp/fuga/index.do?params={\”key1\":1,\”key2\":{\”key3\":[{\”key4\”:1,\”key5\”:1,\”key6\":\”value6\",\”key7\":\”value7\"}]}}
上記のようにparameterにObjectの配列を含む、ちょっと複雑なURLへのGET Requestを実装する必要があり、上手くできずに困っています。
その際、「?params=」 以降のparametersを[String: Any] の形式で作成し、URLComponentsのqueryItemsとして追加したいと考えています。
もし、何かいい方法がありましたら、ご教示いただきたいです。
何卒、よろしくお願い致します。
■ 試した内容(playground)
let baseURL = URL(string: "https://hogehoge.ne.jp/")! let path = "fuga/index.do" var param: [String: Any] = [:] param["key1"] = 1 var key2Value: [String: Any] = [:] key2Value["key3"] = [(key4: 1, key5: 1, key6: "value6", key7: "value7")] // "key3" は (key4: Int, key5: Int, key6: String, key7: String)のObjectの配列となるようにしたい param["key2"] = key2Value print(param) var returnParam: [String: Any] = [:] returnParam["params"] = param // 既存の実装上、この処理を使用して実現できるとありがたいです。 func convertParameters(parameters: [String: Any]) -> [URLQueryItem] { return parameters.map { URLQueryItem(name: $0.key, value: "($0.value)") } } let url = baseURL.appendingPathComponent(path) guard var components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { fatalError("invalid url") } components.queryItems = convertParameters(parameters: returnParam) print(components.queryItems) var urlRequest = URLRequest(url: url) urlRequest.url = components.url print(urlRequest.url) // Optional(https://hogehoge.ne.jp/fuga/index.do?params=%5B%22key1%22:%201,%20%22key2%22:%20%5B%22key3%22:%20%5B(key4:%201,%20key5:%201,%20key6:%20%22value6%22,%20key7:%20%22value7%22)%5D%5D%5D) // 本当は下記のように出力されるようにしたいです。 // https://hogehoge.ne.jp/fuga/index.do?params=%7B%22key1%22%3A1%2C%22key2%22%3A%7B%22key3%22%3A%5B%7B%22key4%22%3A1%2C%22key5%22%3A1%2C%22key6%22%3A%22value6%22%2C%22key7%22%3A%22value7%22%7D%5D%7D%7D
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/12 04:41