javascriptでは、array ≒ hash と信じていました。
しかし、次のように書いた場合、hashのvalueは取得できるものの、jQuery.json.jsでjson化すると、null listなjsonしかできません。
var hash = new Array(); hash['KEY_A'] = 'VAL_A'; hash['KEY_B'] = 'VAL_B'; hash['KEY_C'] = 'VAL_C'; alert( hash['KEY_C'] ); alert( typeof(hash) +':'+ $.toJSON(hash) ); //-> object:[] ????なぜ、null list?
なので、new Array() を new Object() にして対処しました。
var hash_obj = new Object(); hash_obj['KEY_A'] = 'VAL_A'; hash_obj['KEY_B'] = 'VAL_B'; hash_obj['KEY_C'] = 'VAL_C'; alert( typeof(hash_obj) +'->'+ $.toJSON(hash_obj) ); //-> object->{"KEY_A":"VAL_A","KEY_B":"VAL_B","KEY_C":"VAL_C"} //なので、hashのjson化は↑こうした方が良さそう
new Array() も new Object() も typeof == 'object' なのになぜ?
普段、jqueryに任せっきりなので、この辺りは未だに理解していません。
以下は参考です。
var array = new Array(); array.push('A'); array.push('B'); array.push('C'); alert( typeof(array) +':'+ $.toJSON(array) ); //-> object:["A","B","C"] 予想通り var hash = new Array(); hash['KEY_A'] = 'VAL_A'; hash['KEY_B'] = 'VAL_B'; hash['KEY_C'] = 'VAL_C'; alert( hash['KEY_C'] ); alert( typeof(hash) +':'+ $.toJSON(hash) ); //-> object:[] ????なぜ、null list? var hash_obj = new Object(); hash_obj['KEY_A'] = 'VAL_A'; hash_obj['KEY_B'] = 'VAL_B'; hash_obj['KEY_C'] = 'VAL_C'; alert( typeof(hash_obj) +'->'+ $.toJSON(hash_obj) ); //-> object->{"KEY_A":"VAL_A","KEY_B":"VAL_B","KEY_C":"VAL_C"} //なので、hashのjson化は↑こうした方が良さそう