質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2250閲覧

POST通信でRequestBodyを付与したい

quwant

総合スコア5

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/06/04 01:55

編集2021/06/04 02:06

swiftにてpost通信時、requestbodyを付与する方法は下記の通りです。

Swift

1// set the request-body(JSON) 2let params: [String: Any] = [ 3 "testNumber": "123567", 4] 5//または以下のような記述 6var params = Dictionary<String,String>() 7params["testNumber"] = "123567"

ただ、これは下記のような純粋なrequestbodyの場合に使えます。

Swift

1{ 2 "no": 123, 3 "name": "taro", 4 "id": 1 5}

もし、下記のような配列/ネストが含まれるrequestbodyの場合はどの様に記述すればよろしいのでしょうか?
Dictionary型で記述をしたいので是非そちらの記述法を教えていただけると幸いです。

Swift

1{ 2 "list": [ 3 { 4 "key": "update_datetime", 5 "asc": true 6 } 7 ], 8 "paging": { 9 "pageSize": 100, 10 "pageNo": 1 11 }, 12 "no": 1, 13 "admin": true 14}

▼参考サイト
https://dolphinetech.com/xcode/swift-post-json/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Swift では配列も辞書もどちらも [] なので、{} を [] に書き換えるだけですね。

swift

1let params: [String: Any] = [ 2 "list": [ 3 [ 4 "key": "update_datetime", 5 "asc": true 6 ] 7 ], 8 "paging": [ 9 "pageSize": 100, 10 "pageNo": 1 11 ], 12 "no": 1, 13 "admin": true 14]

こういう書き方もできます。(なお、[String: Any] は Dictionary<String, Any> と同じです。)
が、params["list"] は Any なので、params["list"][0]["key"] = 〜 とは書けません。

swift

1var params = [String: Any]() 2params["list"] = [ 3 [ 4 "key": "update_datetime", 5 "asc": true 6 ] 7] 8params["paging"] = [ 9 "pageSize": 100, 10 "pageNo": 1 11] 12params["no"] = 1 13params["admin"] = true

御所望の書き方は、SwiftyJSON を使えばできるかと。

swift

1import SwiftyJSON 2 3var params = JSON() 4params["list"] = [JSON()] 5params["list"][0]["key"] = "update_datetime" 6params["list"][0]["asc"] = true 7params["paging"] = JSON() 8params["paging"]["pageSize"] = 100 9params["paging"]["pageNo"] = 1 10params["no"] = 1 11params["admin"] = true 12 13if let data = try? params.rawData() { 14 print(String(data: data, encoding: .utf8)!) 15}

投稿2021/06/04 02:35

編集2021/06/04 03:09
hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quwant

2021/06/04 02:44 編集

hoshi-takanoriさん なるほど、{}を[]で書き換えるんですね。 おかげでエラーがなくなりました。ありがとうございます。 ちなみにDictionary型で記述することは可能でしょうか? 下記のように何パターンか試したのですができなくて。。。 var params = Dictionary<String,String>() params[["list"]["key"]] = "update_datetime" or params[["list"][0]["key"]] = "update_datetime" or params[["list"[0]]["key"]] = "update_datetime" or params["list"[0]["key"]] = "update_datetime"
quwant

2021/06/04 03:13

素晴らしいです!求めていたのはまさにこれです! ご回答いただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問