Javascript 将google电子表格结构转换为字典
我有一些细胞是这样排列的:Javascript 将google电子表格结构转换为字典,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一些细胞是这样排列的: { 'd/': { 'dhome/': { 'duser/': { 'ddownloads/': { 'ffile.txt': 'Contents of file' }, 'ddocuments/': { 'fprgm.py': '# python' } } } } } 我想把它们转换成这样一个对象: { 'd
{
'd/': {
'dhome/': {
'duser/': {
'ddownloads/': {
'ffile.txt': 'Contents of file'
},
'ddocuments/': {
'fprgm.py': '# python'
}
}
}
}
}
我想把它们转换成这样一个对象:
{
'd/': {
'dhome/': {
'duser/': {
'ddownloads/': {
'ffile.txt': 'Contents of file'
},
'ddocuments/': {
'fprgm.py': '# python'
}
}
}
}
}
因此,任何以d
开头的键都是目录,任何以f
开头的键都是文件,但第一个字符不是其实际名称的一部分
有人知道我是如何做到这一点的吗?好的,这对我很有用。这可能不是很有效,但它确实起到了作用
function getSpreadsheet()
{
return SpreadsheetApp.getActiveSpreadsheet();
}
function getRange(r)
{
return getSpreadsheet().getRange(r);
}
function getDirs()
{
const range = getRange('folders!A1:Z');
const raw_s = range.getDisplayValues()
.map(function(vals)
{
return vals.map(function(val, i, arr)
{
val = val.trim();
if (val == '')
{
return null;
}
return [val, i];
})
.filter(function(val)
{
return val != null;
})
[0];
})
.filter(function(vals)
{
return vals != null;
});
let struc = tree_from_list(raw_s);
return struc;
}
function tree_from_list(list) {
var list_node = list.shift();
var depth = list_node[1];
var root = {name: list_node[0], children: []};
var tree_node;
var cur_nodes = [];
cur_nodes[depth] = root;
while (list.length > 0) {
list_node = list.shift();
tree_node = {name: list_node[0], children: []};
depth = list_node[1];
if (cur_nodes[depth - 1] === undefined)
throw 'invalid list!';
cur_nodes[depth - 1].children.push(tree_node);
cur_nodes[depth] = tree_node;
}
return root;
}
不完全是答案。更像是解决问题的方向 您的输入看起来几乎是有效的: 您可以使用许多工具将YAML解析为JSON。例如: 输出:
{
"root": {
"home": {
"user": {
"downloads": {
"file_txt": "Contents of file"
},
"documents": {
"prgm_py": "# python"
}
}
}
}
}
我将通过构建对象的JSON字符串表示法(没有数组,因此更容易实现),然后
JSON.parse()
将该字符串转换为对象。你试过那种方法吗?您是否有任何示例代码?您能否展示您尝试过的内容,并说明您遇到的困难?
{
"root": {
"home": {
"user": {
"downloads": {
"file_txt": "Contents of file"
},
"documents": {
"prgm_py": "# python"
}
}
}
}
}