我正在编写一些javascript来展平和取消嵌套的JSON结构。例如,一个看起来像这个{"bim":[1,2,[6,7]]}
的对象将被转换为另一个看起来像{'@@#root#@@': { bim: 'bim/1' },'bim/1': [ 1, 2, '2/4' ],'2/4': [ 6, 7 ] }
的JSON对象
其中@@#root#@@
是我用来确定哪个对象是整个结构的根的标识符。到目前为止,我已经能够为我的大多数测试用例重建原始的JSON结构。但是有几个测试用例一直在失败。我提供了两个这样的例子
{ '@@#root#@@': { bim: 'bim/1' },'bim/1': [ 1, 2, '2/4', 5,'4/8'],'2/4':[ 6, 7 ],'4/8': { '35': 55 } }
和
{ '@@#root#@@': { bim: 'bim/1' },'bim/1': [ 1, 2, '2/4', '3/6' ],'2/4':{ '34': 55 },'3/6': [ 6, 7 ] }
在这两种情况下,都有一个包含数组和JSON对象的数组。这似乎是我的测试失败的唯一情况。在所有其他情况下,它们运行得很好,并返回原始的JSON结构。
function rebuild( parent){
_.forEach(parent, function(value, key){
if(notVisited(value) && isRef(value)){
visited.push(value);
remove(parent, key);
parent[key] = globObj[value];
parent = parent[key];
rebuild(parent);
}
});
};
globObj是一个将引用映射到其对象的对象。我正在尝试进行深度优先搜索,当我遇到它时,我递归地用它们的原始对象替换引用。有什么东西我不见了吗?