详解Js 根据文件夹目录获取Json数据输出demo

下面是详解 "JS 根据文件夹目录获取 Json 数据输出 demo" 的完整攻略。

1. 概述

本攻略主要讲解如何使用 JS 根据文件夹目录获取 json 数据,最终输出到页面中。具体实现方式是对文件夹目录进行遍历,生成对应的 json 数据,然后输出到页面中。

2. 准备工作

在开始之前,需要准备一些开发环境和依赖:

  • Node.js,用于在后台生成 json 数据。
  • Express 框架,用于搭建本地服务器。
  • Treeify 模块,用于将 json 数据格式化成可视化树状结构。

安装步骤:

  1. 安装 Node.js

官网下载地址:https://nodejs.org/

  1. 创建项目并初始化 npm

打开命令行窗口(Windows 用户使用 cmd 或 PowerShell),进入项目目录,执行以下命令:

mkdir my-project
cd my-project
npm init -y
  1. 安装 Express 框架和 Treeify 模块

执行以下命令安装:

npm install express treeify

3. 主要实现步骤

  1. 在项目中创建一个名为 public 的文件夹,用于存放静态 HTML 和 JS 文件。
  2. public 文件夹下创建一个名为 data 的文件夹,用于存放数据文件(例如:json 文件)。
  3. data 文件夹下创建一个名为 folder1 的文件夹,用于模拟目录结构,在 folder1 文件夹下创建子文件夹 folder11folder12,并在这两个子文件夹中创建子文件夹和数据文件。
  4. public 文件夹下创建一个名为 index.html 的文件,用于显示输出的 json 数据。
  5. public 文件夹下创建一个名为 main.js 的文件,用于编写 JS 代码。

接下来,我们开始具体实现。

3.1 生成 json 数据

main.js 文件中编写以下代码:

const fs = require('fs');
const path = require('path');

function generateJson(dir, cb) {
  const result = { name: path.basename(dir) };
  const children = [];

  fs.readdir(dir, (err, files) => {
    if (err) throw err;

    files.forEach((file) => {
      const filePath = path.join(dir, file);
      if (fs.statSync(filePath).isDirectory()) {
        children.push(generateJson(filePath));
      } else {
        children.push({ name: file });
      }
    });

    result.children = children;

    cb(result);
  });
}

generateJson('./public/data/folder1', (data) => {
  console.log(data);
});

简单解释一下这段代码:

  • generateJson() 函数用于生成 json 数据,参数 dir 代表要遍历的目录路径,参数 cb 代表回调函数,用于处理遍历完成后的 json 数据。
  • path.basename() 方法可返回 dir 的 basename,即目录名。
  • fs.readdir() 方法用于读取目录下的文件。
  • fs.statSync() 方法用于判断文件是目录还是文件。
  • 遍历所有文件,对于子目录,递归调用 generateJson() 函数,将结果作为子节点的 children 属性;对于文件,直接将文件名作为节点对象即可。
  • 最后调用回调函数,将生成的 json 数据传递出去。

接下来,运行 node main.js 命令,即可在控制台输出对应的 json 数据,示例数据:

{
  "name": "folder1",
  "children": [
    {
      "name": "folder11",
      "children": [
        { "name": "data11.txt" },
        { "name": "folder111" }
      ]
    },
    {
      "name": "folder12",
      "children": [
        { "name": "data12.txt" }
      ]
    }
  ]
}

3.2 输出 json 数据到页面

index.html 文件中添加以下代码:

<!DOCTYPE html>
<html>
  <head>
    <title>展示 json 数据</title>
  </head>
  <body>
    <div id="json"></div>
    <script src="main.js"></script>
  </body>
</html>

main.js 文件中编写以下代码:

const express = require('express');
const fs = require('fs');
const path = require('path');
const treeify = require('treeify');

const app = express();
const port = 3000;
const dir = './public/data/folder1';

function generateJson(dir, cb) {
  const result = { name: path.basename(dir) };
  const children = [];

  fs.readdir(dir, (err, files) => {
    if (err) throw err;

    files.forEach((file) => {
      const filePath = path.join(dir, file);
      if (fs.statSync(filePath).isDirectory()) {
        children.push(generateJson(filePath));
      } else {
        children.push({ name: file });
      }
    });

    result.children = children;

    cb(result);
  });
}

generateJson(dir, (data) => {
  const jsonStr = treeify.asTree(data, true, true);

  app.get('/', (req, res) => {
    res.send(`<pre>${jsonStr}</pre>`);
  });

  app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}`);
  });
});

简单解释一下这段代码:

  • express() 函数用于创建 express 实例。
  • generateJson() 函数同上。
  • 使用 treeify.asTree() 方法将 json 数据转换为可视化树状结构并转为字符串。
  • app.get() 方法用于处理页面请求,将可视化数据作为 HTML 输出到页面中。
  • app.listen() 方法用于启动本地服务器并监听端口。

接下来,执行 node main.js 命令,并打开浏览器访问 http://localhost:3000,即可在页面中看到可视化的文件夹目录结构和对应的数据,示例如下:

└─ folder1
   ├─ folder11
   │  ├─ data11.txt
   │  └─ folder111
   └─ folder12
      └─ data12.txt

4. 示例说明

4.1 示例一

文件夹目录:

- public
  - data
    - folder1
      - data1.txt
      - folder11
        - data11.txt
        - folder111
          - data111.txt
      - folder12
        - data12.txt

生成的 json 数据:

{
  "name": "folder1",
  "children": [
    { "name": "data1.txt" },
    {
      "name": "folder11",
      "children": [
        { "name": "data11.txt" },
        {
          "name": "folder111",
          "children": [
            { "name": "data111.txt" }
          ]
        }
      ]
    },
    {
      "name": "folder12",
      "children": [
        { "name": "data12.txt" }
      ]
    }
  ]
}

在页面中显示的可视化树状结构:

└─ folder1
   ├─ data1.txt
   ├─ folder11
   │  ├─ data11.txt
   │  └─ folder111
   │     └─ data111.txt
   └─ folder12
      └─ data12.txt

4.2 示例二

文件夹目录:

- public
  - data
    - folder1
      - folder11
        - folder111
        - folder112
          - data1121.txt
      - folder12
        - folder121
        - folder122
          - data1221.txt

生成的 json 数据:

{
  "name": "folder1",
  "children": [
    {
      "name": "folder11",
      "children": [
        {
          "name": "folder111"
        },
        {
          "name": "folder112",
          "children": [
            { "name": "data1121.txt" }
          ]
        }
      ]
    },
    {
      "name": "folder12",
      "children": [
        { "name": "folder121" },
        {
          "name": "folder122",
          "children": [
            { "name": "data1221.txt" }
          ]
        }
      ]
    }
  ]
}

在页面中显示的可视化树状结构:

└─ folder1
   ├─ folder11
   │  ├─ folder111
   │  └─ folder112
   │     └─ data1121.txt
   └─ folder12
      ├─ folder121
      └─ folder122
         └─ data1221.txt

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Js 根据文件夹目录获取Json数据输出demo - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 完美解决JS文件页面加载时的阻塞问题

    当浏览器加载 HTML 文件时,在遇到 <script> 标签时,会立即停止加载其他资源,转而加载并执行该脚本,这就是 JS 文件阻塞页面加载的问题,如果页面中的 JS 文件过多或者大小过大,将导致页面加载速度缓慢,降低用户体验。为了解决这个问题,我们可以采取以下几种方法。 1. 异步加载 JS 文件 将脚本标签的 async 属性设置为 tru…

    JavaScript 2023年5月27日
    00
  • JavaScript检测原始值、引用值、属性

    JavaScript是一门弱类型语言,因此理解原始值和引用值的概念对于开发人员来说至关重要。在JavaScript中,有两种类型的值:原始值和引用值。原始值是不可变的,而引用值是可变的。 JavaScript的原始值和引用值 JavaScript的原始值包括字符串、数字、布尔值等。原始值是不可变的,也就是说,无法直接更改原始值的值。例如: let a = &…

    JavaScript 2023年6月10日
    00
  • javascript知识点收藏

    JavaScript知识点收藏攻略 概述 本文将介绍JavaScript自学中需要重点掌握的知识点,并提供收藏的资源、工具和学习方法。 知识点 以下是自学JavaScript过程中需要重点掌握的知识点:- 变量、数据类型与运算符- 流程控制语句(if/else、switch/case、循环)- 函数与对象的概念、创建与使用- 常见数据结构(如数组、栈、队列、…

    JavaScript 2023年5月18日
    00
  • 举例详解JavaScript中Promise的使用

    下面我将详细讲解JavaScript中Promise的使用: 什么是 Promise? Promise 是 JavaScript 中用于处理异步操作的一种方案,它可以使异步操作更加优雅地编写,避免回调地狱的问题,解决了回调函数嵌套过深的问题。 Promise 有三种状态: pending(等待中) fulfilled(已完成) rejected(已拒绝) P…

    JavaScript 2023年5月27日
    00
  • javascript实现倒计时小案例

    下面是“JavaScript实现倒计时小案例”的完整攻略。 1. 准备工作 在编写倒计时小案例之前,需要掌握 JavaScript 基础语法,包括函数、变量、条件语句、循环语句等。同时,还需要了解日期对象 Date。以及能够基本运用 DOM 操作。 为了更好地构建简单的页面结构,可以使用 html 和 css。 2. 分析需求 在实现倒计时小案例之前,了解并…

    JavaScript 2023年5月27日
    00
  • JavaScript语法约定和程序调试原理解析

    JavaScript语法约定和程序调试原理解析 JavaScript语法约定 变量命名 变量名必须以字母、下划线(_)或美元符号($)开头。不能以数字开头。 变量名可以包含字母、数字、下划线、美元符号。 变量名区分大小写。 变量名不允许使用JavaScript中的关键字和保留字。 语句分号 JavaScript中一般可以省略语句结束的分号,但是在以下情况下必…

    JavaScript 2023年5月28日
    00
  • JavaScript函数中上下文有哪些规则

    JavaScript中的函数实际上是对象,和其他对象一样在创建时会得到一个[[Scope]]属性,用于指向函数创建时的作用域链。这个作用域链保存了在函数创建时的变量对象和外部词法环境的引用关系。在函数调用时,JavaScript会创建一个活动对象(也称为执行上下文),用于保存函数执行过程中产生的变量对象、函数调用参数、this指向等信息。 JavaScrip…

    JavaScript 2023年5月27日
    00
  • js 页面执行时间计算代码

    下面是关于“js 页面执行时间计算代码”的完整攻略。 1. 确定需要计算的页面区域 在编写计算页面执行时间的代码之前,需要确定需要计算的页面区域。这可以是整个页面,也可以只是页面上的一部分。一般来说,计算整个页面的执行时间比较耗费资源,建议还是选择计算某一个特定区域的执行时间。 2. 使用performance API 在计算页面执行时间时,可以使用浏览器提…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部