Advertisement
Guest User

Untitled

a guest
Jul 1st, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. function parseFormUrlEncodedString(serializedFormData) {
  2. var decodedFormData = decodeURIComponent(serializedFormData.replace(/\+/g, " "));
  3. var pairs = decodedFormData.split('&');
  4. var target = {};
  5.  
  6. var whatIsNext = function(memberAccessIndex, arrayAccessIndex) {
  7. if (memberAccessIndex > -1 && arrayAccessIndex > -1) {
  8. if (memberAccessIndex < arrayAccessIndex) {
  9. return 'object';
  10. } else {
  11. return 'array';
  12. }
  13. }
  14. else if (memberAccessIndex > -1) {
  15. return 'object';
  16. } else if (arrayAccessIndex > -1) {
  17. return 'array';
  18. }
  19.  
  20. return 'primitive';
  21. };
  22.  
  23. var addPair = function(pair, obj) {
  24. var currentSplit = pair.split('=');
  25.  
  26. if (currentSplit.length === 2) {
  27. var name = currentSplit[0];
  28. var value = currentSplit[1];
  29. var memberAccessIndex = name.indexOf('.');
  30. var arrayAccessIndex = name.indexOf('[');
  31. var nextItem = whatIsNext(memberAccessIndex, arrayAccessIndex);
  32.  
  33. if (nextItem === 'object') {
  34. // Nested object
  35. name = name.substring(0, memberAccessIndex);
  36.  
  37. if (!obj[name]) {
  38. obj[name] = {};
  39. }
  40.  
  41. addPair(pair.substring(memberAccessIndex + 1), obj[name]);
  42. } else if (nextItem === 'array') {
  43. // Array
  44. var index = name.substring(arrayAccessIndex + 1, name.indexOf(']'));
  45. name = name.substring(0, arrayAccessIndex);
  46.  
  47. if (!obj[name]) {
  48. obj[name] = [];
  49. }
  50.  
  51. var arr = obj[name];
  52.  
  53. if (memberAccessIndex > -1) {
  54. // Array of objects
  55. if (!arr[index]) {
  56. arr[index] = {};
  57. }
  58.  
  59. addPair(pair.substring(memberAccessIndex + 1), arr[index]);
  60. } else {
  61. // Array of primitives
  62. arr[index] = value;
  63. }
  64. } else {
  65. // Primitive
  66. obj[name] = value;
  67. }
  68. }
  69. };
  70.  
  71. pairs.forEach(function(pair) {
  72. addPair(pair, target);
  73. });
  74.  
  75. return target;
  76. }
  77.  
  78. var objWithArray = parseFormUrlEncodedString('names[0]=Larry&names[1]=Moe&names[2]=Curly');
  79. var objWithNestedObj = parseFormUrlEncodedString('car.make=Saturn&car.model=SL2&car.year=1998&car.engine.power=125 HP&car.engine.type=4C DOHC');
  80. 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