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

yizhihongxing

下面是详解 "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日

相关文章

  • JavaScript截取指定长度字符串点击可以展开全部代码

    下面是详细讲解“JavaScript截取指定长度字符串点击可以展开全部代码”的完整攻略。 1. 需求分析 在网页上展示代码时,为了节约页面空间,通常需要对代码进行截取,只显示部分内容。但是,当用户需要查看完整的代码时,需要提供一个展开全文的功能。因此,我们需要使用JavaScript截取指定长度的字符串,并且在用户点击时展开全部字符串。 2. 解决方案 2.…

    JavaScript 2023年5月28日
    00
  • java程序中的延时加载异常及解决方案

    Java程序中的延时加载异常及解决方案 什么是延时加载异常? 在Java程序中,经常会涉及到类的加载和实例化。通过类的加载,Java将.class文件中的字节码转换为JVM可以理解的结构(如Class对象);而实例化则是创建对象实例的过程。 在程序开发中,有时候需要在程序启动时直接加载所需类,但也有一些场景需要进行延时加载,也就是在程序运行时再加载类,这时就…

    JavaScript 2023年5月28日
    00
  • JavaScript 微任务和宏任务讲解

    JavaScript 微任务和宏任务讲解 在 JavaScript 中,异步任务主要分为微任务和宏任务两种。宏任务可以理解为宏大的任务,就是需要花费比较长时间才能完成的任务,比如定时器、ajax 请求、DOM 事件等。微任务可以理解为小任务,比较轻量,基本上可以在当前任务完成后马上被执行,比如 Promise。 在执行异步任务时,引擎会将宏任务放入宏任务队列…

    JavaScript 2023年5月28日
    00
  • js原生Ajax的封装和原理详解

    下面是关于”js原生Ajax的封装和原理详解”的完整攻略: 什么是Ajax Ajax是指异步JavaScript和XML(Asynchronous Javascript and XML)技术,主要用于异步加载数据,是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。 使用Ajax技术,通过XMLHttpRequest对象向服务器发送请求,并进行异步通…

    JavaScript 2023年6月11日
    00
  • JavaScript函数节流的两种写法

    JavaScript函数节流的概念是指限制事件触发的频率。例如,我们可以设置函数在一定时间内只能触发一次,这可以在处理一些高频事件时提高页面性能。 在JavaScript实现函数节流的时候,一般有两种常用的写法,下面将会分别进行介绍。 时间戳实现 时间戳实现是通过记录上一次执行的时间,和当前时间进行比较,如果时间差大于设定的时间阈值,就执行函数,否则就不执行…

    JavaScript 2023年5月27日
    00
  • javascript Blob对象实现文件下载

    JavaScript Blob对象实现文件下载 在Web开发中,经常需要实现文件的上传和下载功能。这里介绍一种实现文件下载的方法:使用JavaScript的Blob对象。 Blob对象 Blob(Binary Large Object)对象表示一个不可变的、原始数据的类似文件对象。它允许读取文件内容、以及将内容存储到文件中。在实现文件下载的过程中,我们将要使…

    JavaScript 2023年5月27日
    00
  • javascript中常用编程知识

    下面我将为大家详细讲解JavaScript中常用编程知识的完整攻略。 一、变量 在JavaScript中,我们可以使用var、let和const关键字来声明变量。 1. var 使用var声明的变量具有全局或函数作用域。例如: var x = 10; function foo() { var y = 20; console.log(x); // 输出10 c…

    JavaScript 2023年5月27日
    00
  • 《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析

    下面是《JavaScript设计模式》学习笔记三的详细解析,包括单例模式的原理及其实现方法。 什么是单例模式? 在JavaScript中,单例模式是一个非常有用的设计模式。所谓单例模式,就是指一个类仅有一个实例并提供一个全局访问点。 使用单例模式可以避免创建过多的对象,降低系统内存的开销,并且可以让我们更方便地管理某些全局状态或全局资源。 单例模式的实现方法…

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