JS's object to spring request
The snippet can be accessed without any authentication.
Authored by
Tanawatra C.
Convert Javascript's object to recoginizable to spring object mapping
snippet.md 1.78 KiB
```javascript
var flatten = function(data, prefix) {
var output = [];
var nvl = (s) => (s ? s : "");
var pNvl = (s) => (s ? (s + ".") : "");
if (typeof data != 'object') {
return [{
name: prefix,
value: data
}];
} else {
for (var k in data) {
switch (typeof data[k]) {
case 'string':
case 'number':
output.push({
'name': pNvl(prefix) + k,
'value': data[k]
});
break;
case 'object':
if (data[k].length != void(0)) {
// array
for (var i in data[k]) {
$.merge(output, flatten(data[k][i], pNvl(prefix) + k + '[' + i + ']'));
}
} else {
// object
$.merge(output, flatten(data[k], pNvl(prefix) + k));
}
break;
}
}
}
return output;
}
```
Test cases:
```javascript
(()=>{
cases = [
{ input: {a:1}, expected: 'a=1' },
{ input: {a:[1]}, expected: 'a[0]=1' },
{ input: {a:[1],b:0}, expected: 'a[0]=1&b=0' },
{ input: {a:[1,2]}, expected: 'a[0]=1&a[1]=2' },
{ input: {a:[1,2],b:{c:1}}, expected: 'a[0]=1&a[1]=2&b.c=1' },
{ input: {a:[0],b:{c:{d:1}}}, expected: 'a[0]=0&b.c.d=1' },
{ input: {a:[{n:1},{n:2}]}, expected: 'a[0].n=1&a[1].n=2' },
{ input: {a:[{n:1},{n:[1,2]}]}, expected: 'a[0].n=1&a[1].n[0]=1&a[1].n[1]=2' },
{ input: {a:[{n:1},{n:[1,2],m:[3,4],o:{a:1}}],b:{q:[1]}}, expected: 'a[0].n=1&a[1].n[0]=1&a[1].n[1]=2&a[1].m[0]=3&a[1].m[1]=4&a[1].o.a=1&b.q[0]=1' },
];
for (var i in cases) {
if ( ( actual = decodeURIComponent( $.param( flatten(cases[i].input) ) ) ) != cases[i].expected ) {
throw "\nExpected: " + cases[i].expected + "\n" + "Actual: " + actual;
} else {
console.log("CASE:" + JSON.stringify(cases[i].input) + " [PASS]");
}
}
})();
```
Please register or sign in to comment