如何在javascript中用嵌套对象序列化object



我有

"resource_ratio": [
[
"Barbara",
"Ben",
"Anne",
"John",
"Cindy",
"Nick",
"Lex",
"Edd",
"Eric",
"Jacky",
"Paul"
],
[
0.11974110032362459,
0.037756202804746494,
0.23516720604099245,
0.10895361380798274,
0.10140237324703344,
0.03559870550161812,
0.02912621359223301,
0.08737864077669903,
0.02481121898597627,
0.1186623516720604,
0.10140237324703344
]
]

这个2维数组,我想用javascript在HTML页面上显示然后在单击按钮后以JSON形式返回结果。

目前,我使用这个显示了resource_raio的值

var resourceRatioBoxTag = new Array();
var resourceRatioTag = new Array();
for (var i = 0; i < selectedData.resource_ratio.length; i++) {
//selectedData.resource_ratio[1][0]
resourceRatioBoxTag[i] = "<input id='resourceRatio[" + i + "]' name='resourceRatio'>";
for (var j = 0; j < selectedData.resource_ratio[i].length; j++) {
resourceRatioBoxTag[i] += "<input type='text' id='resourceRatio[" + i + "][" + j + "]' value='" + selectedData.resource_ratio[i][j] + "' name='" + i + "'>";
}
resourceRatioBoxTag[i] += "</input>";
$("#resourceRatioDiv").append(resourceRatioBoxTag[i]);
}

这给了我一个数组的结果,里面有所有的值,比如[val1,val2,val3]

当我做时

var dataBox = $('#inputDataForm').serializeObject();

JSON结果

它不是的形式

"resource_ratio":[["Barbara";,"Ben";,"Anne";,"John";,"Cindy";,"Nick";,"Lex";,"Edd";,"Eric";,"Jacky";,"保罗;],[0.11974110032362459,0.037756202804746494,0.23516720604099245,0.1089536138798274,0.10140237324703344,0.03559870550161812,0.02912621359223301,0.08737864077669903,0.02481121898597627,0.1186623516720604,0.10140237324703344]]

正如我所希望的那样。因此,我尝试更改数组值的输入名称(因为我已经了解到SerializeObject按输入名称分组值(,并制作了类似于的东西

for (var i = 0; i < selectedData.resource_ratio.length; i++) {
//selectedData.resource_ratio[1][0]
resourceRatioBoxTag[i] = "<p id='resourceRatio[" + i + "]' name='resourceRatio'>";
for (var j = 0; j < selectedData.resource_ratio[i].length; j++) {
resourceRatioBoxTag[i] += "<input type='text' id='resourceRatio[" + i + "][" + j + "]' value='" + selectedData.resource_ratio[i][j] + "' name='" + i + "'>";
}
resourceRatioBoxTag[i] += "</p>";
$("#resourceRatioDiv").append(resourceRatioBoxTag[i]);
}

(除了我把p标签改为输入标签外,代码是一样的(

它给了我的序列化值

"0": [
"Barbara",
"Ben",
"Anne",
"John",
"Cindy",
"Nick",
"Lex",
"Edd",
"Eric",
"Jacky",
"Paul"
],
"1": [
"0.11974110032362459",
"0.037756202804746494",
"0.23516720604099245",
"0.10895361380798274",
"0.10140237324703344",
"0.03559870550161812",
"0.02912621359223301",
"0.08737864077669903",
"0.02481121898597627",
"0.1186623516720604",
"0.10140237324703344"
]

这和我想要的差不多,只是它不在resource_ratio值内,它由[0]和[1](后面跟着输入名称(分组。

我应该怎么做才能在resourceRatio键内的[I]中获得resourceRatio[I][j]值?如果我的问题让感到困惑,我很抱歉

serializeObject是我使用的jquery的插件。这是:

$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};

将值转换为JSON的最简单方法是使用JSON.stringify:

let dataAsString = JSON.stringify( myObject )

如果您的对象有任何循环引用,这将中断。如果您的数据是一个典型的业务数据,那么这不会是一个问题。

然后将其转换回:

let data = JSON.parse( dataAsString )

除非您有非常特殊的原因,否则我建议您始终使用这种内置功能,而不是像jQuery这样的库中的功能。

最新更新