-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConvertQueryToMap.js
More file actions
47 lines (40 loc) · 1.32 KB
/
ConvertQueryToMap.js
File metadata and controls
47 lines (40 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Converts a URL Query String into an object map
function convertQueryToMap(query) {
console.log('query: ' + unescape(query));
var out = {};
var re = /(.*?)=(.*)/;
var splitArr = query.split('&');
var parse = [];
splitArr.forEach(function(entry){
console.log('entry: ' + entry);
var matches = entry.match(re);
console.log('matches: ' + matches);
if(matches !== null){
var data = {};
data['path'] = RegExp.$1;
data['value'] = RegExp.$2;
parse.push(data);
}
});
parse.forEach(function(data){
console.log('data: ' + data.path + ' ' + data.value);
set(data.path, unescape(data.value));
});
console.log('out: ' + JSON.stringify(out));
return out;
function set(path, value) {
var schema = out; // a moving reference to internal objects within obj
var pList = path.split('.');
var len = pList.length;
for(var i = 0; i < len-1; i++) {
var elem = pList[i];
if( !schema[elem] ) schema[elem] = {}
schema = schema[elem];
}
schema[pList[len-1]] = value;
};
}
var input = "user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue";
//input = "a=a%26b%3Dc%3F"; // a=1%202
//input = "a=1%202";
convertQueryToMap(input);