将二维JS数组转为JSON字符串时出现空字符串问题求助
问题解决:JSON.stringify返回空字符串的原因及修复方案
你遇到的核心问题是误用JavaScript数组存储键值对。数组在JS里只处理数字索引,你用字符串作为索引(比如"1"、"48")其实是给数组对象添加了额外属性,这些属性不会被JSON.stringify序列化,所以最终得到空字符串。
你的代码问题点
- 用
new Array()初始化arraydata,但你实际需要的是键值对结构,数组不适合这种场景 - 给数组键名手动加引号(
arraydata['"'+key1+'"'])完全多余,徒增复杂度 - 内层同样用数组存储字符串键值,重复了第一个错误
修复后的代码
var arraydata = {}; // 替换数组为普通对象 $('.classselector').each(function(){ let key1 = $(this).data('key1'); let key2 = $(this).data('key2'); // 初始化内层对象(如果不存在) if (!arraydata[key1]) { arraydata[key1] = {}; } arraydata[key1][key2] = $(this).val(); });
修复说明
- 外层用普通对象
{}替代数组,对象支持任意字符串键,会被JSON.stringify正常序列化 - 内层也用对象存储
key2对应的数值,符合你需要的键值对结构 - 去掉了多余的引号包裹,直接使用
key1、key2作为键名,代码更简洁
现在调用JSON.stringify(arraydata)会得到正确的JSON结果:
{ "1": {"48": "1", "49": "2"}, "2": {"51": "3", "52": "4", "53": "5", "54": "6"}, "3": {"30": "7"} }
内容的提问来源于stack exchange,提问作者geek geek
相关产品推荐
相关产品推荐

