我正在尝试将表单数据(字段名称引用嵌套 JSON 结构)转换为 JSON 对象。表示表单数据的对象是:
{
"custom[1].a": "FIXED",
"custom[1].b": "",
"custom[1].c": "PROPORTIONATE",
"custom[1].d": ""
"custom[2].a": "FIXED2",
"custom[2].b": "",
"custom[2].c": "PROPORTIONATE2",
"custom[2].d": ""
}
我想将其转换为可以字符串化的对象。
"customConfiguration": [
{
"a": "PROPORTIONATE",
"b": "",
"c": "FIXED",
"d": ""
},
{ "a": "PROPORTIONATE2",
"b": "",
"c": "FIXED2",
"d": ""
}]
最佳答案
也许这就是你想要的。假设数字表示数组索引,并且从一开始,则减少索引以获得从零开始的结果。
使用reduce迭代对象的所有键,从空对象开始
将
[
替换为.[
,将键分成几部分,因此带有[...]
的字符串表示数组值其他都是常用属性为正确的属性引用应用一个reduce,从第一个reduce的对象开始
检查 item 是否为数组索引,如果是则减 1,使其从零开始
应用于属性,如果下一部分是数组索引,则返回一个数组,否则返回一个对象
检查该键是否是数组中的最后一个键并分配值
返回新对象引用
返回新对象
var object = {
'custom[1].a': 'PROPORTIONATE',
'custom[1].b': '',
'custom[1].c': 'FIXED',
'custom[1].d': '',
'custom[2].a': 'PROPORTIONATE2',
'custom[2].b': '',
'custom[2].c': 'FIXED2',
'custom[2].d': ''
},
newObject = Object.keys(object).reduce(function (r, a) {
a.replace('[', '.[').split('.').reduce(function (o, b, i, kk) {
function isArrayIndex(s) { return /^\[\d+\]$/.test(s); }
if (isArrayIndex(b)) {
b = b.match(/\d+/) - 1;
}
o[b] = o[b] || (isArrayIndex(kk[i + 1]) ? [] : {});
if (i + 1 === kk.length) {
o[b] = object[a];
}
return o[b];
}, r);
return r;
}, {});
document.write('<pre>' + JSON.stringify(newObject, 0, 4) + '</pre>');
关于javascript - 将 HTML 表单数据转换为嵌套 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656665/