如何创建 JSON 个对象文件夹名称和文件名称视图

How to create JSON objects Folder name and File Name View

我有一个这样的 JSON 文件:

{
    "Sheet1": [
        {
            "Folder name": "Folder 1",
            "Filename": "1- Introduction.mp4",
        },
        {
            "Filename": "2- Prerequisites.mp4",
        },
        {
            "Filename": "4- What is React Native.mp4",
        },
        {
            "Folder name": "Folder 2",
            "Filename": "1- Knowledge.mp4",
        },
        {
            "Filename": "2- Exercise.mp4",
        },]
 }

如何做成这样:

{
  "Folder 1": [
           {
            "Filename": "1- Introduction.mp4",
           },
           {
            "Filename": "2- Prerequisites.mp4",
           }
           ],

  "Folder 2": [
           {
            "Filename": "1- Knowledge.mp4",
           },
           {
            "Filename": "2- Exercise.mp4",
           }
           ]
}

我对 JSON 不熟悉,但我知道 Python 词典。我尝试在 Python 中执行此操作,但无法以这种方式执行。 任何帮助将不胜感激。

正如 Taplar 所指出的,您无法在 JSON 中创建没有键的对象值。您可以改用对象数组。

我正在考虑将始终在数组的第一个元素中定义该文件夹,而仅具有“文件名”键的下一个对象将在先前定义的文件夹中。然后,当找到另一个文件夹时,下一个文件将在新文件夹中。

考虑到这一点,您可以使用此功能:

const fs = require('fs');

function mapFolderStructure(json) {
    const object = JSON.parse(json);
    const returnObject = {};
    let currentFolder = null;
    
    for (const key in object) {
        returnObject[key] = {};
        for (const item of object[key]) {
            if (item.hasOwnProperty('Folder name')) {
                currentFolder = item['Folder name'];
            }
            
            if (currentFolder) {
                if (!returnObject[key][currentFolder]) returnObject[key][currentFolder] = [];
                returnObject[key][currentFolder].push({ Filename: item.Filename });
            }
        }
    }

    return JSON.stringify(returnObject, null, 4);
}

const inputJson = fs.readFileSync('path/to/input', 'utf8');

const outputJson = mapFolderStructure(inputJson);

fs.writeFileSync('path/to/output', outputJson);