【问题标题】:generate the right schema of an s3 aws bucket生成 s3 aws 存储桶的正确模式
【发布时间】:2020-04-29 15:38:38
【问题描述】:

我有代表 aws s3 存储桶内容的路径或位置列表:

const keysS3 = [
                'platform-tests/',
                'platform-tests/datasets/',
                'platform-tests/datasets/random_csv_datasets/',
                'platform-tests/datasets/random_csv_datasets/1/',
                'platform-tests/datasets/random_csv_datasets/1/raw/',
                'platform-tests/datasets/random_csv_datasets/1/raw/change_name_dtype.json',
                'platform-tests/datasets/random_csv_datasets/1/raw/change_name_dtype_2.csv',
                'platform-tests/datasets/random_csv_datasets/1/raw/random_data_stack.json',
                'platform-tests/datasets/random_csv_datasets/1/raw/random_data_stack_0.csv',
                'platform-tests/datasets/random_csv_datasets/1/raw/random_data_stack_1.csv',
                'platform-tests/datasets/random_csv_datasets/1/raw/random_data_stack_2.csv',
                'platform-tests/test-folder/',
                'README.md',
                'preprocessed_data.csv',
                'preprocessed_data2 copy.csv',
                'reg1.csv',
                'tested_demo.csv'
            ];

我正在 Typescrtip 中编写这段代码:

let output = {};
let current: any;
for (const path of keysS3) {
                current = output;
                const segment = path.split('/');
                segment.forEach((value, index) => {
                    if (value !== '' && index + 1 < segment.length) {
                        if (!(value in current)) {
                            current[value] = {};
                        }
                        current = current[value];
                    } else {
                        current[value] = null;
                    }
                });
            }
            console.log(JSON.stringify(output));

要将其转换为此架构,输出如下:

{
   "platform-tests":{
      "datasets":{
         "random_csv_datasets":{
            "1":{
               "raw":{
                  "change_name_dtype.json":null,
                  "change_name_dtype_2.csv":null,
                  "random_data_stack.json":null,
                  "random_data_stack_0.csv":null,
                  "random_data_stack_1.csv":null,
                  "random_data_stack_2.csv":null
               }
            }
         }
      },
      "test-folder":{

      }
   },
   "README.md":null,
   "preprocessed_data.csv":null,
   "preprocessed_data2 copy.csv":null,
   "reg1.csv":null,
   "tested_demo.csv":null
}

但是,问题是我得到了这个架构,它在每个子文件夹之后添加了这个额外的字段

"":null

{
   "platform-tests":{
      "":null,
      "datasets":{
         "":null,
         "random_csv_datasets":{
            "1":{
               "":null,
               "raw":{
                  "":null,
                  "change_name_dtype.json":null,
                  "change_name_dtype_2.csv":null,
                  "random_data_stack.json":null,
                  "random_data_stack_0.csv":null,
                  "random_data_stack_1.csv":null,
                  "random_data_stack_2.csv":null
               }
            },
            "":null
         }
      },
      "test-folder":{
         "":null
      }
   },
   "README.md":null,
   "preprocessed_data.csv":null,
   "preprocessed_data2 copy.csv":null,
   "reg1.csv":null,
   "tested_demo.csv":null
}

【问题讨论】:

    标签: javascript node.js json typescript


    【解决方案1】:

    我只是通过添加这行代码来解决它:

     if (!(value in current)) {
         current[value] = value.includes('.') ? null : {};
    }
    

    验证值是路径还是文件名。

    【讨论】:

      【解决方案2】:

      过滤掉 .split 上的空元素,因为您以 / 结尾,因此您将始终在数组末尾得到一个空数组元素。

      const segment = path.split('/').filter(Boolean);

      【讨论】:

      • 不,它没有帮助。我收到此错误:TypeError: Cannot set property 'datasets' of null
      猜你喜欢
      • 2015-01-08
      • 2023-02-01
      • 2017-02-14
      • 2017-06-26
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多