我有一些複雜的輸入名稱,如:this[is][][a][complex][name]
,我需要將其轉換爲數組/對象。像:將複雜輸入名稱轉換爲數組
{ "this": { "is": [ { "a": { "complex": { "name": true } } } ] } }
我該怎麼做純JavaScript或jQuery的?
原因
我需要jQuery.ajax()方法把它像:
jQuery.ajax({
"data": {
"complex": complex_names,
"time": Date.now()
}, ...
});
如果我只是像序列數據this[is][][a][complex][name]=true
,它打破了HTTP請求,並且將它像data[this[is][][a][complex][name]]
而不是data[this][is][][a][complex][name]
。
例
我做這個例子來幫助你。好吧,假設我有這樣的:
<input type="text" name="test1" value="ok" />
<input type="text" name="test2" value="ok" />
<input type="text" name="test3[1]" value="ok" />
<input type="text" name="test4[1][2]" value="ok" />
<input type="text" name="test5[]" value="ok" />
如果我直接通過POST發送,它會產生這樣的請求:
test1: ok
test2: ok
test3[1]: ok
test4[1][2]: ok
test5[]: ok
但我需要通過jQuery.ajax發送()方法,在data
選項(如complex_data
與其他一些數據)的數組內部。該請求將類似於:
call_time: 1612
call_title: test
complex_data[test1]: ok
complex_data[test2]: ok
complex_data[test3][1]: ok
complex_data[test4][1][2]: ok
complex_data[test5][]: ok
請注意,我的表單輸入將設置在complex_data
對象內。但是,如果我只是將我的數據作爲一個數組,如:
{
"test1": "ok",
"test2": "ok",
"test3[1]": "ok",
"test4[1][2]": "ok",
"test5[]": "ok",
}
並將其發送到complex_data
,它會要求它,而不是:
TA)。該請求將類似於:
call_time: 1612
call_title: test
complex_data[test1]: ok
complex_data[test2]: ok
complex_data[test3][1]]: ok
complex_data[test4][1][2]]: ok
complex_data[test5][]]: ok
簡化的情況一樣test1
河畔test2
將正常工作,但複雜的情況下,像test3[1]
將不被理解和意志爆發。
替代方法
目前我使用的是像創建一個數組的解決方法解決方案:this][is][][a][complex
,它是由HTTP請求納入data[...]
什麼轉data[
this][is][][a][complex][name
]
。
研究
它類似於How to convert input name to JavaScript array的問題,但它是一個有點複雜,因爲深度爲0到無窮大(一般到3級)。所以,除非使用eval(!),否則我無法做任何事情。
什麼是你的決定是否'[]'或'{}'應該使用什麼邏輯?你似乎在你的例子中混合它們,但我不明白爲什麼使用它。 **編輯:**沒關係,我想我現在正在實現它... – Ian 2013-04-05 18:01:27
你不能只使用序列化方法? – dfsq 2013-04-05 18:04:51
如果我直接將它發送到AJAX'data'選項,Serialize方法會生成一個好結果。但是如果我需要將它發送給一個數組並將其發送給AJAX,它就會被破壞(就像** reason **主題一樣)。我會盡力改進這個例子。 – 2013-04-05 18:15:32