如何序列化JavaScript关联数组?

我需要序列化一个关联的JavaScript数组。 它是一种简单的产品forms和数值,但在构建数组之后似乎是空的。

代码在这里: http : //jsbin.com/usupi6/4/edit

通常,不要将JS数组用于“关联数组”。 使用普通对象:

var array_products = {}; 

这就是为什么$.each不起作用的原因:jQuery认识到你传递一个数组并且只是迭代数值属性。 所有其他人都将被忽略。

数组应该只包含带数字键的条目。 您可以指定字符串键,但很多function都不会将它们考虑在内。


更好:

在使用jQuery时,可以使用jQuery.param [docs]进行序列化。 您只需构造正确的输入数组:

 var array_products = []; // now we need an array again $( '.check_product:checked' ).each(function( i, obj ) { // index and value var num = $(obj).next().val(); var label = $(obj).next().next().attr( 'data-label' ); // build array if( ( num > 0 ) && ( typeof num !== undefined ) ) { array_products.push({name: label, value: num}); } }); var serialized_products = $.param(array_products); 

无需实现自己的URI编码function。

DEMO


最好:

如果为输入字段指定正确的name

  

你甚至可以使用.serialize() [docs]并大大减少代码量(我使用下一个相邻的选择器[docs] ):

 var serialized_products = $('.check_product:checked + input').serialize(); 

(但它将包括0值)。

DEMO

您可以使用JSON库 (或本机JSON对象,如果可用)将其序列化。

 var serialised = JSON.stringify(obj); 

JSON.stringify(object)

作为旁注,没有关联数组只有对象。

使用json-js支持IE6和IE7等传统浏览器