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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JSON

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

Q&A

解決済

1回答

2446閲覧

VBAのJsonConverterの&対応

first_php

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JSON

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

0グッド

0クリップ

投稿2019/01/21 07:43

VBAのJsonConverterを使って
JSONファイルを作成し、下記サイトを参考に
HTTP通信でファイルを送ったのですが
何故か&が含まれているJSONファイルを送信するとバグってしまうのですが
どのように対応を行えばいいでしょうか?
※バグってしまうというのは、正常ではないJSONファイルが生成されてしまうという意味です。

【参考サイト】
https://github.com/VBA-tools/VBA-JSON
https://doruby.jp/users/ookouchi/entries/201708-EXCEL-VBA-JSON-API-MSXML2-XMLHTTP

VBA

1Public Sub test() 2 3 4 Dim JsonObject As Object 5 Set JsonObject = New Dictionary 6 7 JsonObject.Add "id", 1 8 JsonObject.Add "name", "John Smith" 9 JsonObject.Add "friend_ids", New Collection 10 JsonObject("friend_ids").Add "1&&0" 11 12 JsonObject.Add "shipTo", New Dictionary 13 JsonObject("shipTo").Add "name", "test&.test" 14 JsonObject("shipTo").Add "address", "1-2-3&A" 15 16 17 ' イミディエイトウィンドウで確認(デバック用) 18 19 Dim objHTTP As Object 20Set objHTTP = CreateObject("msxml2.xmlhttp") 21objHTTP.Open "POST", "http://***/test.php", False 22objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 23objHTTP.send JsonConverter.ConvertToJson(JsonObject) 24strRes = objHTTP.ResponseText 25MsgBox (strRes) 26' レスポンスコード(正常) 27If objHTTP.Status = 200 Then 28 MsgBox "正常に終了しました" 29End If 30 31End Sub

php

1print_r($_POST);

下記、出力結果を記載いたします。
①VBAでデータ生成時のデータ

VBA

1{ 2 "id": 1, 3 "name": "John Smith", 4 "friend_ids": [ 5 "1&&0" 6 ], 7 "shipTo": { 8 "name": "test&.test", 9 "address": "1-2-3&A" 10 } 11}

②phpでprint_rで取得時の形式

php

1Array 2( 3 [{"id":1,"name":"John_Smith","friend_ids":_"1] => 4 [0"],"shipTo":{"name":"test] => 5 [_test","address":"1-2-3] => 6 [A"}}] => 7)

データ生成時までは問題ないと思っていたのですが、
何か対策等あるのでしょうか。
お手数をおかけしますが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

JSON変換ルーチンの問題ではなくapplication/x-www-form-urlencodedで送信する際に適切なエンコードを行っていないため、&がパラメーター区切りとみなされてしまっている状況ではないかと思われます。

投稿2019/01/21 08:01

maisumakun

総合スコア145183

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

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

first_php

2019/01/21 08:25

ありがとうございます、それで対応出来る気がしてきました! 適切なエンコードというものを調べてみます!
first_php

2019/01/21 09:06

"&"が自動的にエンコードされなかった為 Replace(sendData, "&", "%26") のように、文字列を強制的に%26に変更するようにしました! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問