详解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常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例

    下面我就详细讲解一下这三个操作的完整攻略。 JS常用方法 JS中有许多常用方法,以下是一些常见的方法: querySelector:用于获取文档中匹配指定选择器的第一个元素。 getElementById:根据id获取文档中的元素。 addEventListener:用于向指定元素添加事件句柄。 setTimeout:用于在指定的时间之后执行一次函数。 se…

    JavaScript 2023年5月28日
    00
  • javascript eval(func())使用示例

    《Javascript eval(func())使用示例》: 1. 什么是 eval(func())? eval() 是 JavaScript 的一种内置函数,它将字符串解析为 JavaScript 代码并执行。eval(func()) 内嵌了 func() 函数,将 func() 函数转换为字符串后传给 eval() 函数,从而实现对 func() 函数的…

    JavaScript 2023年6月11日
    00
  • vue页面锁屏的完美解决方法记录

    Vue页面锁屏的完美解决方法记录 在Vue项目中,有时候需要在某些页面或某些操作时锁屏,防止用户在数据处理过程中造成不必要的错误。下面是Vue页面锁屏的完美解决方法记录。 方案介绍 该方案使用了Vue官方推荐的vue-loading-overlay插件实现锁屏。该插件提供了一种可定制的加载遮罩层,同时支持全局和组件内部使用。 实现步骤 第一步:安装插件 使用…

    JavaScript 2023年6月11日
    00
  • JS前端基于canvas给图片添加水印

    在前端开发中,给图片添加水印是一项常见的需求。利用canvas可以比较方便地实现给图片添加水印的功能。下面是实现这一需求的完整攻略: 1. 准备工作 在开始使用canvas给图片添加水印之前,我们需要准备一张需要添加水印的图片和一个水印图片,这个水印图片可以是公司logo、网站名称等等。另外,需要一个canvas标签,这里以<canvas id=”ca…

    JavaScript 2023年5月19日
    00
  • js正则查找match()与替换replace()用法实例

    js正则查找match()与替换replace()用法实例 正则表达式是一种字符串模式匹配的工具,常用于字符串搜索和替换。在JavaScript中,正则表达式同样也是一种重要的功能。使用正则表达式可以达到快速、准确地对字符串进行搜索和替换的目的。 在JavaScript中,我们可以使用match()方法和replace()方法来进行正则表达式的搜索和替换。下…

    JavaScript 2023年6月10日
    00
  • JavaScript 五大常见函数

    JavaScript 五大常见函数 在 JavaScript 编程中,有五大常见函数,它们分别是:parseInt()、parseFloat()、isNaN()、toFixed() 和 toString()。下面我们将结合代码示例来详细讲解这五大常见函数。 parseInt() parseInt() 方法将一个字符串进行解析,返回整数值。 // 示例1 le…

    JavaScript 2023年5月18日
    00
  • 基于JS快速实现导航下拉菜单动画效果附源码下载

    关于“基于JS快速实现导航下拉菜单动画效果附源码下载”的完整攻略,我将从以下几个方面说明: 实现原理 开发步骤 源码下载 实现原理 在实现导航下拉菜单动画效果的过程中,我们可以使用JavaScript来控制菜单的显示和隐藏。具体过程如下: 鼠标移动到菜单的触发元素上时,显示下拉菜单。这里可以使用CSS的:hover伪类来实现鼠标移入和移出的效果。 显示下拉菜…

    JavaScript 2023年6月11日
    00
  • 介绍一下sourcemap

    Sourcemap(源代码映射)用于将生产环境中的压缩代码映射回原始的源代码。在前端开发过程中,JavaScript、CSS 和其他文件通常会被压缩和混淆,以减小文件大小和提高网站加载速度。然而,这会让调试和错误定位变得困难,因为生产环境中的代码难以阅读和理解。 Sourcemap 的作用是在开发和生产环境之间建立一个桥梁,使开发人员能够在浏览器中查看、调试…

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