Query String って言ったり GETパラメータ って言ったりするけど、例のアレのことね。URL中の ? の後ろのヤツ。
Node.jsのquerystringモジュールに以下のようにデータを食わせてみた。
var qs = require('querystring');
var ab = {
a: [1, 'ei'],
b: [2, 'bee'],
};
console.log(qs.stringify(ab));
// a=1&a=ei&b=2&b=bee
\a=1&a=ei&b=2&b=bee/ Σ(゜ω゜)
あれ、おかしくね?と思うわけですよ。「a[0]=1&a[1]=ei&b[0]=2&b[1]=bee」じゃねーの?と。
まぁ、普段PHPも触ってるんでね。
PHPの$_GETの解釈だと「a[0]=1&a[1]=ei&b[0]=2&b[1]=bee」と「{a: [1, 'ei'], b: [2, 'bee']}」で等価なんです。
厳密には違うかもだけどほぼほぼ等価。コーディング時に困らない程度に等価。
で、件の「a=1&a=ei&b=2&b=bee」を$_GETに解釈させるとどうなったか・・・
echo json_encode($_GET);
// {"a":"ei","b":"bee"}
\{"a":"ei","b":"bee"}/ ・・・(=ω=)
知ってた知ってた。後ろの値で上書きね。そうだよね。
さて、どうしようかな・・・(´・ω・`)
【追記】
qs モジュール使ったら大体思った通りになった。
var qs = require('qs');
var ab = {
a: [1, 'ei'],
b: [2, 'bee'],
};
console.log(qs.stringify(ab));
// a%5B0%5D=1&a%5B1%5D=ei&b%5B0%5D=2&b%5B1%5D=bee
console.log(decodeURIComponent(qs.stringify(ab)));
// a[0]=1&a[1]=ei&b[0]=2&b[1]=bee