将以下键->值对象“数组”转换为正确的“JSON”样式对象的最简单方法是什么?下面的示例将输入转换为图表。
var input = {
"graph.default.seriesColor" : ["#cccccc", "#3c3c3c"],
"graph.default.stackSeries" : false,
"graph.default.title.text" : "Hello!",
"graph.default.title.show" : false,
"graph.default.axesDefaults.show" : true,
"graph.default.axesDefaults.min" : 17,
"graph.default.axesDefaults.max" : 20,
};
var graph = {
default: {
seriesColor: ["#cccccc", "#3c3c3c"],
stackSeries: false,
title: {
text: "Hello!",
show: false
},
axesDefault: {
show: true,
min: 17,
max: 20
}
}
};
我考虑过使用 eval,但是它很快就以递归方式变得复杂。
出于某种原因,我真的很想为此编写一个函数:
function makeObj(input)
{
var output = {};
for(var key in input)
{
var nodes = key.split('.'), dest = output;
if(nodes.length < 1)
continue;
for(var i = 0; i < (nodes.length - 1); ++ i)
{
var node = nodes[i];
dest = (dest[node] === undefined) ?
(dest[node] = {}) : dest[node];
}
dest[nodes[nodes.length - 1]] = input[key];
}
return output;
}
graph = makeObj(input);
显然不同于eval
解决方案,这只会接受您所描述的确切格式的字符串(x.y.z)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)