问题描述
{
"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",}
],"Folder 2": [
{
"Filename": "1- KNowledge.mp4",}
]
}
我对JSON有新知识,但是我知道Python字典。我试图在Python中执行此操作,但是无法做到这一点。 任何帮助将不胜感激。
解决方法
如Taplar所指出的,没有JSON中的键,您将无法创建对象值。您可以改用对象数组。
我正在考虑该文件夹将始终在数组的第一个元素中定义,而仅带有“ Filename”键的下一个对象将在先前定义的文件夹中。然后,当找到另一个文件夹时,下一个文件将位于新文件夹中。
请记住,您可以使用此功能:
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);