おそらく既製の関数がありますが、この (すぐに作成された) 関数も動作するはずです。
function convert(key, obj) {
var collector = {};
function recurse(key, obj) {
var property, name;
if( typeof obj === "object" ) {
for( property in obj ) {
if( obj.hasOwnProperty(property) ) {
name = key + "[" + property + "]";
recurse(name, obj[property]);
}
}
} else {
collector[key] = String(obj);
}
}
recurse(key, obj);
return collector;
}
開始キーとオブジェクトを指定すると、完全な名前と値を持つ「フラットな」オブジェクトが返されます。
var order = {
"id": 13,
"name": "Sebastian",
"items": [
{
"id": 5
}
]
};
var flattened = convert("order", order);
// `flattened` is now:
// {
// 'order[id]': 13,
// 'order[name]': 'Sebastian',
// 'order[items][0][id]': 5
// }