メニュー
検索
言語
タグ
オブジェクトをURLクエリの文字列に変換する関数 (objToURLQuery)
総合評価: - 作成日: 2025-11-12
コメント:
Braveブラウザで動作確認済み。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>objToURLQuery</title>
<script>
/**
* オブジェクトをURLクエリの文字列に変換する。
*
* obj ... 変換するオブジェクト
* dep ... 再帰用のカウント変数
* sep ... セパレータ。デフォルトは'&'
* eq ... 代入演算子。デフォルトは'='
* wrap ... 値を囲むなら文字列指定(例: wrap: '"')
*
* 返り値 ... 文字列
*/
function objToURLQuery (obj, {
dep=0,
sep='&',
eq='=',
wrap=null,
}={}) {
let s = ''
function _wrap (s) {
s = '' + s
if (!wrap) {
return s
}
let ret = ''
ret += wrap
for (let c of s) {
if (c === wrap) {
ret += '\\'
}
ret += c
}
ret += wrap
return ret
}
if (dep === 0) {
s += '?'
}
if (typeof obj === 'number' ||
typeof obj === 'string') {
s += '' + _wrap(obj)
return s
}
for (let k in obj) {
let v = obj[k]
if (Array.isArray(v)) {
let vs = ''
for (let el of v) {
vs += objToURLQuery(el, { dep: dep+1 })
vs += ','
}
if (vs[vs.length-1] === ',') {
vs = vs.slice(0, -1)
}
s += k + eq + _wrap(vs)
} else if (typeof v === 'object') {
s += k + eq + '{'
s += objToURLQuery(v, {
dep: dep+1,
sep: ',',
eq: ':',
wrap: '"',
})
s += '}'
} else {
s += k + eq + _wrap(v)
}
s += sep
}
if (s[s.length-1] === sep) {
s = s.slice(0, -1)
}
return s
}
document.addEventListener('DOMContentLoaded', () => {
let s
s = objToURLQuery({
a: 123,
b: 'bbb',
})
console.log(s)
console.assert(s === '?a=123&b=bbb')
s = objToURLQuery({
a: 123,
b: 'bbb',
}, {
wrap: '"',
})
console.log(s)
console.assert(s === '?a="123"&b="bbb"')
s = objToURLQuery({
a: [1, '22', 3.14],
b: {
c: 4,
d: 'd"D"d',
e: [5, 6],
f: { g: 7 }
}
})
console.log(s)
console.assert(s === '?a=1,22,3.14&b={c:"4",d:"d\\"D\\"d",e:"5,6",f:{g:"7"}}')
console.log('OK')
})
</script>
</head>
<body>
</body>
</html>