我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Js怎么根据文件夹目录获取Json数据输出demo

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Js怎么根据文件夹目录获取Json数据输出demo

今天小编给大家分享一下Js怎么根据文件夹目录获取Json数据输出demo的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.搭建初始样式(html,css)

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>h3 {text-align: center;}#file_input {display: none;}.userBtn {padding: 6px 25px;background: #00bfff;border-radius: 4px;color: white;cursor: pointer;border: none;}.userBtn:active {background-color: #00bfff90;}.userBtn[disabled] {background: #00bfff60;cursor: not-allowed;}#dataShowArea {width: 100%;height: 600px;border: 1px solid #000;box-sizing: border-box;margin-top: 20px;overflow: hidden;padding: 20px;padding-top: 10px;background: #0cff0014;border-radius: 6px;display: flex;flex-wrap: wrap;flex-direction: column;}#dataShowArea #realityArea {width: 100%;flex: 1;overflow: overlay;box-sizing: border-box;margin: 0px;color: #3300ed;border-radius: 6px;}#dataShowArea #realityArea::-webkit-scrollbar {display: none;}#dataShowArea .hintUser{width: 100%;color: #3300ed;text-align: center;font-style: italic;margin-bottom: 10px;}.userBtnArea{width: 100%;display: flex;align-items: center;justify-content: space-around;}</style></head><body><h3>文件夹路径生成json文件</h3><div class="userBtnArea"><button id="coverInput" class="userBtn" onclick="coverInputClick()">选择文件夹</button><button id="saveJson" class="userBtn" onclick="saveJsonFile()" disabled>输出JSON文件</button></div><!-- 选取单个文件夹 --><input type="file" id="file_input" webkitdirectory directory onchange="outputFile(this.files)" /><!-- 存放加载文件的数据的区域 --><div id="dataShowArea"><div class="hintUser">数据预览</div><pre id="realityArea" class="hljs"></pre></div><script>//全局的文件 json 数据let filesData = '';let obj = document.getElementById('realityArea');let saveJsonBtn = document.getElementById('saveJson');</script></body></html>

2.文件夹目录转换成JSON数据

//File 文件格式需要转成 Object => 将字段提出方便装换const fileField = [    'lastModified',    'lastModifiedDate',    'name',    'size',    'type',    'webkitRelativePath',];//文件 目录数据生成async function handleFiles(files) {    if (files.length > 0) {        let catalogue = {            // childer:{}        };        for (fileItem of files) {            //获取要插入的对象 => File类型不能直接插入,会报错 => File类型不归属于Object类型            let fileData = {};            fileField.forEach((item) => {                fileData[item] = eval(`fileItem.${item}.toString()`);            });            //文件的name值为  xx.文件属性  会在执行插入语句时报错,只拿文件名,不拿文件属性            fileData.noTypeName = fileData.name.split('.')[0];            let fileData_ = JSON.stringify(fileData);            //获取树的每个字段            let catalogueField = fileItem.webkitRelativePath.split('/');            //要执行的js语句拼接            let objStr = catalogueField.reduce((pre, cur, index, arr) => {                                if (index >= arr.length - 1) {                    !eval(pre) && eval(`${pre}={isLeaf:true}`);                    pre = `${pre}['${fileData.noTypeName}']`;                } else {                    index == 0 ? (pre = `${pre}['${cur}']`) : (pre = `${pre}.Folder['${cur}']`);                    !eval(pre) && eval(`${pre}={isLeaf:false,type:'folder',Folder:{}}`);                }                return pre;            }, 'catalogue');            eval(`${objStr}={isLeaf:true,...${fileData_}}`);        }        return catalogue;    }}

3.JSON数据输出成JSON文件

//写成json文件输出function saveToJson(data) {    if (!data) {        console.error('json文件的数据对象不存在');        return;    }    var content = JSON.stringify(data, null, '\t');    // 转成blob数据对象    var blob = new Blob([content], {        type: 'text/plain;charset=utf-8',    });    //第二步 => 文件数据 转为可以 下载 的地址路径 改路径指向文件数据    let url = window.URL.createObjectURL(blob);    //动态创建a标签 => 模拟触发a标签的下载 => 用于将生成的json数据下载到本地    let link = document.createElement('a');    link.style.display = 'none';    link.href = url;    link.setAttribute('download', 'model.json');    document.body.appendChild(link);    link.click();    document.body.removeChild(link);    //URL.createObjectURL函数创建的数据不会再内存删除 得手动删除或者浏览器转态退出    window.URL.revokeObjectURL(url);}

4.完整代码

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>h3 {text-align: center;}#file_input {display: none;}.userBtn {padding: 6px 25px;background: #00bfff;border-radius: 4px;color: white;cursor: pointer;border: none;}.userBtn:active {background-color: #00bfff90;}.userBtn[disabled] {background: #00bfff60;cursor: not-allowed;}#dataShowArea {width: 100%;height: 600px;border: 1px solid #000;box-sizing: border-box;margin-top: 20px;overflow: hidden;padding: 20px;padding-top: 10px;background: #0cff0014;border-radius: 6px;display: flex;flex-wrap: wrap;flex-direction: column;}#dataShowArea #realityArea {width: 100%;flex: 1;overflow: overlay;box-sizing: border-box;margin: 0px;color: #3300ed;border-radius: 6px;}#dataShowArea #realityArea::-webkit-scrollbar {display: none;}#dataShowArea .hintUser{width: 100%;color: #3300ed;text-align: center;font-style: italic;margin-bottom: 10px;}.userBtnArea{width: 100%;display: flex;align-items: center;justify-content: space-around;}</style></head><body><h3>文件夹路径生成json文件</h3><div class="userBtnArea"><button id="coverInput" class="userBtn" onclick="coverInputClick()">选择文件夹</button><button id="saveJson" class="userBtn" onclick="saveJsonFile()" disabled>输出JSON文件</button></div><!-- 选取单个文件 --><!-- <input type="file" id="file" onchange="handleFiles(this.files)" /> --><!-- 选取多个文件 --><!-- <input type="file" id="file_input" multiple="multiple" onchange="handleFiles(this.files)" /> --><!-- 选取单个文件夹 --><input type="file" id="file_input" webkitdirectory directory onchange="outputFile(this.files)" /><!-- 存放加载文件的数据的区域 --><div id="dataShowArea"><div class="hintUser">数据预览</div><pre id="realityArea" class="hljs"></pre></div><script>//全局的文件 json 数据let filesData = '';let obj = document.getElementById('realityArea');let saveJsonBtn = document.getElementById('saveJson');//按钮点击触发input标签的点击function coverInputClick() {document.getElementById('file_input').click();}//报错json文件function saveJsonFile(data) {saveToJson(filesData);}//File 文件格式需要转成 Object => 将字段提出方便装换const fileField = ['lastModified','lastModifiedDate','name','size','type','webkitRelativePath',];//文件 目录数据生成async function handleFiles(files) {if (files.length > 0) {let catalogue = {// childer:{}};for (fileItem of files) {//获取要插入的对象 => File类型不能直接插入,会报错 => File类型不归属于Object类型let fileData = {};fileField.forEach((item) => {fileData[item] = eval(`fileItem.${item}.toString()`);});//文件的name值为  xx.文件属性  会在执行插入语句时报错,只拿文件名,不拿文件属性fileData.noTypeName = fileData.name.split('.')[0];let fileData_ = JSON.stringify(fileData);//获取树的每个字段let catalogueField = fileItem.webkitRelativePath.split('/');//要执行的js语句拼接let objStr = catalogueField.reduce((pre, cur, index, arr) => {if (index >= arr.length - 1) {!eval(pre) && (eval(`${pre}={isLeaf:true}`))pre = `${pre}['${fileData.noTypeName}']`;} else {index == 0 ? pre = `${pre}['${cur}']` : pre = `${pre}.Folder['${cur}']`;!eval(pre) && (eval(`${pre}={isLeaf:false,type:'folder',Folder:{}}`))}// !eval(pre) && (eval(`${pre}={isLeaf:false}`))return pre;}, 'catalogue');eval(`${objStr}={isLeaf:true,...${fileData_}}`);};return catalogue;}}//写成json文件输出function saveToJson(data) {if (!data) {console.error("json文件的数据对象不存在");return;}var content = JSON.stringify(data, null, '\t');// 转成blob数据对象var blob = new Blob([content], {type: "text/plain;charset=utf-8"});//第二步 => 文件数据 转为可以 下载 的地址路径 改路径指向文件数据let url = window.URL.createObjectURL(blob);//这里你会看到类似的地址:blob:http://localhost:8080/d2dbbe3f-7466-415b-a2d0-387cff290acbconsole.log(url);//动态创建a标签 => 模拟触发a标签的下载 => 用于将生成的json数据下载到本地let link = document.createElement('a');link.style.display = "none";link.href = url;link.setAttribute('download', 'model.json');document.body.appendChild(link);link.click();document.body.removeChild(link);window.URL.revokeObjectURL(url);}function outputFile(files) {filesData = '';btnDisabled(saveJsonBtn);handleFiles(files).then(res => {filesData = res;btnCanClick(saveJsonBtn)obj.innerText = JSON.stringify(res, null, 2);}).catch(err => {console.error(err)})}function btnCanClick(btnObj) {btnObj.removeAttribute('disabled');}function btnDisabled(btnObj) {btnObj.setAttribute('disabled', 'disabled');}</script></body></html>

预览

Js怎么根据文件夹目录获取Json数据输出demo

以上就是“Js怎么根据文件夹目录获取Json数据输出demo”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Js怎么根据文件夹目录获取Json数据输出demo

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Js怎么根据文件夹目录获取Json数据输出demo

今天小编给大家分享一下Js怎么根据文件夹目录获取Json数据输出demo的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.搭
2023-07-05

JS怎么根据条件取出数组中对应项

这篇“JS怎么根据条件取出数组中对应项”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS怎么根据条件取出数组中对应项”文章吧
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录