详解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判断数据类型的四种方法

    当我们使用JavaScript编写程序时,经常会遇到数据类型的问题,因此判断数据类型变得非常重要。现在我们将介绍四种方法来判断数据的类型。 一、使用typeof关键字 使用 typeof 关键字可以判断 JavaScript 的数据类型。 typeof 在判断数值、字符串、布尔、undefined、symbol 类型的时候都能准确判断。 但是当判断 null…

    JavaScript 2023年6月10日
    00
  • js判断一个对象是数组(函数)的方法实例

    下面是关于“js判断一个对象是数组(函数)的方法实例”的完整攻略。 判断一个对象是数组的方法 在 JavaScript 中判断一个对象是否为数组的方法有很多种,下面介绍两种比较常用的方法。 方法一:使用 Array.isArray() 使用 Array.isArray() 可以判断一个对象是否为数组,同时可以避免使用 typeof 判断的弊端。 示例代码如下…

    JavaScript 2023年5月27日
    00
  • vue实现复制文字复制图片实例详解

    首先,需要明确:Vue.js本身并没有提供复制文本或复制图片的API,但我们可以使用其他库来实现这些功能,如Clipboard.js或JSZip。 下面是一些详细的步骤,来说明如何在Vue.js应用中实现复制文字和复制图片的功能。 复制文字 步骤1:安装Clipboard.js 可以使用npm在Vue.js项目中安装Clipboard.js: npm ins…

    JavaScript 2023年6月11日
    00
  • javascript 判断字符串是否包含某字符串及indexOf使用示例

    下面为您讲解 JavaScript 判断字符串是否包含某字符串及 indexOf 使用示例的完整攻略。 一、判断字符串是否包含某字符串 在 JavaScript 中,我们可以使用 includes() 方法判断一个字符串是否包含指定的子字符串,includes() 方法返回布尔值,如果字符串包含了指定的子字符串,则返回 true,否则返回 false。 in…

    JavaScript 2023年5月28日
    00
  • P3P 和 跨域 (cross-domain) cookie 访问(读取和设置)

    P3P(Platform for Privacy Preferences)是一个Internet标准,它在Web服务器和浏览器之间传递标准格式的隐私策略。P3P帮助网站明确并公开其隐私政策,并允许用户在浏览网站时了解网站将如何使用其个人信息。跨域cookie指的是在某个域名下,通过设置cookie使得另一个域名下的网站也可以共享这个cookie,即跨域共享c…

    JavaScript 2023年6月11日
    00
  • js输出列表实现代码

    下面是实现JavaScript输出列表的完整攻略,包含以下四个步骤: 创建列表结构 添加列表项 将列表插入到HTML文档中 可选:自定义样式 1. 创建列表结构 在JavaScript中,可以使用createElement()方法创建新的HTML元素。为了创建一个列表,我们需要使用以下代码: const list = document.createEleme…

    JavaScript 2023年5月28日
    00
  • 深入探究JS中的异步编程和事件循环机制

    深入探究JS中的异步编程和事件循环机制 在JavaScript中,异步编程是必不可少的。它可以使我们的程序变得更加高效,同时也可以避免一些由于阻塞线程而导致的问题,比如用户界面的卡顿等。异步编程的核心机制就是事件循环,下面将详细探究JavaScript中的异步编程和事件循环机制。 异步编程 JavaScript是单线程的语言,这意味着它只有一个主线程来处理执…

    JavaScript 2023年5月28日
    00
  • js时间戳与日期格式之间转换详解

    关于“js时间戳与日期格式之间转换详解”这一话题,我将从以下几个方面进行详细讲解: 时间戳(Timestamp)的定义 JavaScript中的时间戳 JavaScript中的日期格式 时间戳与日期格式之间的相互转换 时间戳(Timestamp)的定义 在计算机的领域中,时间戳(Timestamp)是指某个被定义为某个特定事件发生的精确时间点所对应的数字或字…

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