2016-01-07 188 views
0

我想將控制檯顯示(formData)轉換爲嵌套的JSON對象。我得到的formData是:將formdata轉換爲嵌套的JSON

{ 
    "custom[1].a": "FIXED", 
    "custom[1].b": "", 
    "custom[1].c": "PROPORTIONATE", 
    "custom[1].d": "" 
    "custom[2].a": "FIXED2", 
    "custom[2].b": "", 
    "custom[2].c": "PROPORTIONATE2", 
    "custom[2].d": "" 
} 
    I want to convert it to JSON in javascript. 

"customConfiguration": [{ 
     "a": "PROPORTIONATE", 
     "b": "", 
     "c": "FIXED", 
     "d": "" 
    }, 
    { "a": "PROPORTIONATE2", 
     "b": "", 
     "c": "FIXED2", 
     "d": "" 
}] 
+0

是'定製[2] .c'一個字符串?並應該自定義成爲一個數組?從'1'開始? –

+0

以上都不是JSON/JavaScript對象 – Satpal

+2

這看起來不像JSON。這是實際的數據還是某種控制檯顯示? –

回答

1

也許這就是你想要的。假設數字表示數組索引,而基數爲1,則將索引遞減爲基於零的結果。

  • 遍歷所述對象與減少的所有鍵,一個空對象開始

  • .[替換[,分裂份的關鍵,所以用[...]字符串指示數組值,其餘的是通常的屬性

  • 施加減少用於右屬性參考,用的對象開始的第一降低

    • 檢查項目是一個數組索引,如果是減1,使之爲零基於

    • 適用於該屬性的屬性,或者如果下一個部分是一個數組索引,然後返回一個數組另有一個目的

    • 檢查如果該鍵是陣列中的最後一個鍵和分配值

    • 返回新的對象引用

  • 返回新對象

var object = { 
 
     'custom[1].a': 'PROPORTIONATE', 
 
     'custom[1].b': '', 
 
     'custom[1].c': 'FIXED', 
 
     'custom[1].d': '', 
 
     'custom[2].a': 'PROPORTIONATE2', 
 
     'custom[2].b': '', 
 
     'custom[2].c': 'FIXED2', 
 
     'custom[2].d': '' 
 
    }, 
 
    newObject = Object.keys(object).reduce(function (r, a) { 
 
     a.replace('[', '.[').split('.').reduce(function (o, b, i, kk) { 
 
      function isArrayIndex(s) { return /^\[\d+\]$/.test(s); }     
 
      if (isArrayIndex(b)) { 
 
       b = b.match(/\d+/) - 1; 
 
      } 
 
      o[b] = o[b] || (isArrayIndex(kk[i + 1]) ? [] : {}); 
 
      if (i + 1 === kk.length) { 
 
       o[b] = object[a]; 
 
      } 
 
      return o[b]; 
 
     }, r); 
 
     return r; 
 
    }, {}); 
 

 
    document.write('<pre>' + JSON.stringify(newObject, 0, 4) + '</pre>');