Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function parseFormUrlEncodedString(serializedFormData) {
- var decodedFormData = decodeURIComponent(serializedFormData.replace(/\+/g, " "));
- var pairs = decodedFormData.split('&');
- var target = {};
- var whatIsNext = function(memberAccessIndex, arrayAccessIndex) {
- if (memberAccessIndex > -1 && arrayAccessIndex > -1) {
- if (memberAccessIndex < arrayAccessIndex) {
- return 'object';
- } else {
- return 'array';
- }
- }
- else if (memberAccessIndex > -1) {
- return 'object';
- } else if (arrayAccessIndex > -1) {
- return 'array';
- }
- return 'primitive';
- };
- var addPair = function(pair, obj) {
- var currentSplit = pair.split('=');
- if (currentSplit.length === 2) {
- var name = currentSplit[0];
- var value = currentSplit[1];
- var memberAccessIndex = name.indexOf('.');
- var arrayAccessIndex = name.indexOf('[');
- var nextItem = whatIsNext(memberAccessIndex, arrayAccessIndex);
- if (nextItem === 'object') {
- // Nested object
- name = name.substring(0, memberAccessIndex);
- if (!obj[name]) {
- obj[name] = {};
- }
- addPair(pair.substring(memberAccessIndex + 1), obj[name]);
- } else if (nextItem === 'array') {
- // Array
- var index = name.substring(arrayAccessIndex + 1, name.indexOf(']'));
- name = name.substring(0, arrayAccessIndex);
- if (!obj[name]) {
- obj[name] = [];
- }
- var arr = obj[name];
- if (memberAccessIndex > -1) {
- // Array of objects
- if (!arr[index]) {
- arr[index] = {};
- }
- addPair(pair.substring(memberAccessIndex + 1), arr[index]);
- } else {
- // Array of primitives
- arr[index] = value;
- }
- } else {
- // Primitive
- obj[name] = value;
- }
- }
- };
- pairs.forEach(function(pair) {
- addPair(pair, target);
- });
- return target;
- }
- var objWithArray = parseFormUrlEncodedString('names[0]=Larry&names[1]=Moe&names[2]=Curly');
- var objWithNestedObj = parseFormUrlEncodedString('car.make=Saturn&car.model=SL2&car.year=1998&car.engine.power=125 HP&car.engine.type=4C DOHC');
- var objWithArrayOfObj = parseFormUrlEncodedString('car[0].make=Saturn&car[0].model=SL2&car[0].year=1998&car[0].engine.power=125 HP&car[0].engine.type=4C DOHC&car[1].make=Saturn&car[1].model=SL1&car[1].year=1999&car[1].engine.power=100 HP&car[1].engine.type=4C');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement