2010-07-13 124 views
0

我正在使用数组作为关键数据库中对象的ID号的对象的关联数组。安静的自然 - ID是大数字 - 所以这意味着通常有长度为10^4的数组,只有20个元素作为有效的实际对象。javascript中的关联数组到JSON

我想发送这个数据回服务器,但无论我不得不将js对象转换为JSON,我试过所有的&他们都产生一个长度为10^4的JSON字符串。如此多的数据无法发回。

我需要一种将关联数组转换为JSON的方式来丢弃未定义的条目。
有什么建议吗?

编辑:什么我的阵列看起来像 例: VAR myAssociativeArray = [未定义的,不确定的,不确定的...,someobject,一些其他的对象......,不确定的,...又... ..]

+0

....您是否使用'数组'作为关联数组? – kennytm 2010-07-13 08:13:39

+0

如何添加前缀: var myAssociativeArray = {a123812039:“Something”,a123656456:“something else”} – mplungjan 2010-07-13 08:16:11

回答

1

这听起来像你有一个常规的数组,但你使用它,就好像它稀疏(它可能会或可能不会在内部)。以下是如何使用替代功能,将转换为对象:

JSON.stringify(root, function(k,v) 
{ 
    if(v instanceof Array) 
    { 
    var o = {}; 
    for(var ind in v) 
    { 
     if(v.hasOwnProperty(ind)) 
     { 
     o[ind] = v[ind]; 
     } 
    } 
    return o; 
    } 
    return v; 
}); 
0

读你的问题,它看起来正在使用一个数组。这里有一个解决方案只获取数组中定义的条目(不保证顺序)。

请注意,因为它是一个稀疏数组,并且可以高达10000个实例,所以最好只枚举这些属性,而不是实际从0循环到9999,因为它们中的大多数将不确定。所以这对性能更好。

var definedEntries = {}; 

for(var prop in dataObject) { 
    if(dataObject.hasOwnProperty(prop)) { 
     definedEntries[prop] = dataObject[prop]; 
    } 
} 

然后发送definedEntries到服务器。