ふとform-encodedなpostリクエストをしたくなったのですが、みんなjsonの事ばっかり考えていて困ったことがあったので備忘
※URIエンコードの予約文字回避(2019/5/17)
やりたい事
javascriptのobjectをx-www-form-urlencodedなbodyに変えたい
↓こんなのを
objcect.js
var obj = {
first: {
firstA:"a",
firstB:"b"
},
second: "seconds",
third: {
thirdA: {
thirdAA: "aaa",
thirdAB: "bbb"
},
thirdB: "bbb"
}
}
↓こんなのに
string.js
first%5BfirstA%5D=a&first%5BfirstB%5D=b&second=seconds&third%5BthirdA%5D%5BthirdAA%5D=aaa,third%5BthirdA%5D%5BthirdAB%5D=bbb&third%5BthirdB%5D=bbb
こうした
色々パターン考えかったんですけど、脳みそパワー不足で1パターンのみなンだわ
result.js
public createFormEncordedBody(obj) {
let keys = [];
let ret = [];
for (const key in obj) {
if (typeof obj[key] === "object") {
keys.push(key);
ret = ret.concat(this.encodedLoop(keys, obj[key]));
keys = [];
} else {
ret.push(encodeURIComponent(key) + "=" + encodeURIComponent(obj[key]));
}
}
return ret.join("&");
}
public encodedLoop(keys, obj) {
if (typeof obj === "object") {
const ret = [];
for (const key in obj) {
keys.push(key);
ret.push(this.encodedLoop(keys, obj[key]));
keys.pop();
}
return ret.join("&");
} else {
let str = "";
for (const k in keys) {
if (k === "0") {
str += keys[k];
} else {
str += encodeURIComponent("[" + keys[k] + "]");
}
}
str += "=" + encodeURIComponent(obj);
return str;
}
}
助けて
もっとかっこよくイテラブルにやったりしたい。