Javascript 转换展平键->;与嵌套对象的值对
将下面的key->value对象“array”转换为正确的“JSON”样式对象的最简单方法是什么?下面的示例是将输入转换为图形Javascript 转换展平键->;与嵌套对象的值对,javascript,parsing,eval,Javascript,Parsing,Eval,将下面的key->value对象“array”转换为正确的“JSON”样式对象的最简单方法是什么?下面的示例是将输入转换为图形 var input = { "graph.default.seriesColor" : ["#cccccc", "#3c3c3c"], "graph.default.stackSeries" : false, "graph.default.title.text" : "Hello!", "graph.default.title.show"
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);
函数makeObj(输入)
{
var输出={};
for(输入中的var键)
{
var nodes=key.split('.'),dest=output;
如果(节点长度<1)
继续;
对于(变量i=0;i<(nodes.length-1);+i)
{
var节点=节点[i];
dest=(dest[节点]==未定义)?
(dest[node]={}):dest[node];
}
dest[nodes[nodes.length-1]=输入[key];
}
返回输出;
}
图形=makeObj(输入);
显然,与
eval
解决方案不同,它只接受与您描述的格式完全相同的字符串(x.y.z)。我开始胡乱调用一个函数,该函数将慢慢遍历键,假设最后一个“标记”是一个值,并确保之前的所有标记都是对象中的有效值,然后对整个密钥运行eval。然而,它很快变得复杂起来。我现在正在考虑将其转换为json对象的字符串表示形式,并使用json.parse()。很抱歉,我没有任何代码可以显示——我不希望代码得到回报;只是想法。:-)