我正在尝试构建一个脚本,该脚本将周期性地递归迭代我的非关系数据库(firestore),并从中生成一个JSON对象。
我能够遍历所有集合,文档和子集合到最后一层,但是我很难以正确的格式生成JSON对象:要么得到两个底层,要么得到只是前两个。我还尝试了每次递归都生成一个新的JSON对象,并将其附加到全局JSON对象,但这格式设置也不正确。
尝试成功添加到全局JSON对象后,我决定通过从非关系数据库生成成功的文件夹系统来测试我的递归。但是,我想自动化该过程,并且生成文件夹系统非常昂贵且效率低下。
出于测试目的并消除主脚本中的可能错误,我使用给定的JSON数据模型构建了一个小程序:
const data = {
'root': {
'doc1': {'id':1, 'value' : 545},
'doc2': {'id':2, 'value' : 645},
'doc3': {
'id': 3,
'subCol31': {'id':31, 'data' : {'value1': {'da' : 2, 'la': 3}, 'value2' : 545}},
'subCol32': {'id':32, 'data' : {'value1':31, 'data' : {'data':{'data':{'id':321, 'data' : {'id':311, 'value' : 5435}}, 'value' : 1545}, 'value' : 45}}}
},
'doc4': {'id':4, 'age' : 125}
}
}
var processed = {};
function isEmpty(obj) {
let numProperties = 0;
for (let property in obj) {
if (obj.hasOwnProperty(property)) {
++numProperties;
}
}
return numProperties === 0;
}
function mapParentChildPairs(f, obj) {
if (isEmpty(obj)) {
return;
} else {
for (let item in obj) {
if (obj.hasOwnProperty(item)) {
f(item, obj[item]);
processed[item] = obj[item];
mapParentChildPairs(f, obj[item]);
}
}
}
}
mapParentChildPairs(console.log, data);
console.log('processed', processed);
我得到的结果:
{ root:
{ doc1: { id: 1, value: 545 },
doc2: { id: 2, value: 645 },
doc3: { id: 3, subCol31: [Object], subCol32: [Object] },
doc4: { id: 4, age: 125 } },
doc1: { id: 1, value: 545 },
id: 4,
value: 45,
doc2: { id: 2, value: 645 },
doc3:
{ id: 3,
subCol31: { id: 31, data: [Object] },
subCol32: { id: 32, data: [Object] } },
subCol31: { id: 31, data: { value1: [Object], value2: 545 } },
data: { id: 311, value: 5435 },
value1: 31,
da: 2,
la: 3,
value2: 545,
subCol32: { id: 32, data: { value1: 31, data: [Object] } },
doc4: { id: 4, age: 125 },
age: 125 }
我想要达到的结果:
{'root': {
'doc1': {'id':1, 'value' : 545},
'doc2': {'id':2, 'value' : 645},
'doc3': {'id': 3,
'subCol31': {'id':31, 'data' : {'value1': {'da' : 2, 'la': 3}, 'value2' : 545}}, 'subCol32': {'id':32, 'data' : {'value1':31, 'data' : {'data':{'data':{'id':321, 'data' : {'id':311, 'value' : 5435}}, 'value' : 1545}, 'value' : 45}}}},
'doc4': {'id':4, 'age' : 125}}}
预期接收与给定json对象相同的结构,但仅接收前两层。