文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-05 16:55

关注

今天小编给大家分享一下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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯