根据获取的json文件,展示文件目录结构
下载js代码地址 js代码地址 代码如下图所示

展示结果如图,对比两个文件夹的目录文件和大小,文件夹下的子文件夹会显示出退格的效果,以便区分父子文件目录;

由于文件目录较多,js文件目录信息相似,所以使用了递归的方法。
展示出来的文件夹和子文件要显示出退格的效果,所以循环的时候记录自己的层级index
let version1 = data["4.0.0.6006"][0];
let version2 = data["4.0.0.1846"][0]; let data_v1 = version1.dirs;
let data_v2 = version2.dirs; all_file = get_file(data_v1, data_v2, 0); function get_file(data_v1, data_v2, index) {
index++; let arr = [];
data_v1 = data_v1 || [];
data_v2 = data_v2 || []; let len_ = max_len(data_v1, data_v2); for (var i = 0; i < len_; i++) { var item1 = data_v1[i] || {};
var item2 = data_v2[i] || {}; if (is_folder(item1) && is_folder(item2)) { var obj = {};
obj.index = index;
obj.type = 'folder';
obj.v1 = 'v1';
obj.v2 = 'v2';
obj.v1_name = item1['dir_name'];
obj.v2_name = item2['dir_name'];
obj.v1_file_cnt = item1['file_cnt'];
obj.v2_file_cnt = item2['file_cnt'];
obj.v1_size = item1['size'];
obj.v2_size = item2['size'];
arr.push(obj); if (has_dirs(item1) || has_dirs(item2)) {
arr = arr.concat(get_file(item1.dirs, item2.dirs, index));
} arr = arr.concat(_file(item1.files, item2.files, index)); } else if (is_folder(item1) || is_folder(item2)) { if (is_folder(item1)) { var obj = {};
obj.index = index;
obj.type = 'folder';
obj.v1 = 'v1';
obj.v2 = 'v2';
obj.v1_name = item1['dir_name'];
obj.v2_name = '';
obj.v1_file_cnt = item1['file_cnt'];
obj.v2_file_cnt = '';
obj.v1_size = item1['size'];
obj.v2_size = '';
arr.push(obj); } else { var obj = {};
obj.index = index;
obj.type = 'folder';
obj.v1 = 'v1';
obj.v2 = 'v2';
obj.v1_name = '';
obj.v2_name = item2['dir_name'];
obj.v1_file_cnt = '';
obj.v2_file_cnt = item2['file_cnt'];
obj.v1_size = '';
obj.v2_size = item2['size'];
arr.push(obj);
} if (has_dirs(item1) || has_dirs(item2)) { arr = arr.concat(get_file(item1.dirs, item2.dirs, index));
}
arr = arr.concat(_file(item1.files, item2.files, index));
} else if (!is_folder(item1) || !is_folder(item2)) {
arr = arr.concat(_file(item1.files, item2.files, index)); }
}
return arr; } function _file(data1, data2, index) {
index++;
data1 = data1 || [];
data2 = data2 || [];
let len = max_len(data1, data2); var file_arr = [];
for (var i = 0; i < len; i++) {
var file1 = data1[i] || {};
var file2 = data2[i] || {};
var obj = {};
obj.index = index;
obj.type = 'file';
obj.v1 = 'v1';
obj.v2 = 'v2';
obj.v1_name = file1['file_name'] || '';
obj.v2_name = file2['file_name'] || '';
obj.v1_size = file1['size'] || '';
obj.v2_size = file2['size'] || '';
file_arr.push(obj) }
return file_arr;
} function max_len(data1, data2) {
let len1 = data1.length;
let len2 = data2.length; return len1 > len2 ? len1 : len2;
} function is_folder(file) {
return file.hasOwnProperty('dir_name');
} function has_dirs(data) {
return data.hasOwnProperty('dirs')
}
vue代码
<table class="table_border">
<thead> <tr>
<th></th>
<th colspan="2">v1</th>
<th colspan="2">v2</th>
<th colspan="2">v1-v2</th>
</tr>
<tr>
<th>文件夹/文件</th>
<th>文件数量</th>
<th>文件size</th>
<th>文件数量</th>
<th>文件size</th>
<th>文件数量</th>
<th>文件size</th>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in all_file">
<template v-if="item.type=='folder'"> <td :style="{'paddingLeft': parseInt(20*item._index) + 'px' }"><i class="icon_folder icon iconfont icon-folder"></i>{{ item.v1_name|| item.v2_name}}</td>
<td>{{item.v1_file_cnt}}</td>
<td>{{item.v1_size}}</td>
<td>{{item.v2_file_cnt}}</td>
<td>{{item.v2_size}}</td>
<td>{{getdiff(item.v1_file_cnt , item.v2_file_cnt)}}</td>
<td :d="item.v1_size + '-' + item.v2_size">{{getdiff(item.v1_size , item.v2_size)}}</td>
</template>
<template v-if="item.type=='file'"> <td :style="{'paddingLeft': parseInt(20*item._index) + 'px' }"><i class="icon iconfont icon-file"></i>{{ item.v1_name|| item.v2_name}}</td>
<td>{{item.v1_file_cnt}}</td>
<td>{{item.v1_size}}</td>
<td></td>
<td>{{item.v2_size}}</td>
<td></td>
<td :d="item.v1_size + '-' + item.v2_size">{{getdiff(item.v1_size , item.v2_size)}}</td>
</template>
</tr>
</tbody>
</table>
根据获取的json文件,展示文件目录结构的更多相关文章
- Golang Json文件解析为结构体工具-json2go
代码地址如下:http://www.demodashi.com/demo/14946.html 概述 json2go是一个基于Golang开发的轻量json文件解析.转换命令行工具,目前支持转换输出到 ...
- arcgis api 3.x for js 地图加载多个 SHP 图层压缩以及 json 文件展示(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- Asp.NetCore3.1 WebApi 获取配置json文件中的数据
下面只是做一个简单的测试: 1:定义好appsetting.Json文件的配置信息如下: { "Logging": { "LogLevel": { " ...
- 谷歌通过ajax获取本地JSON文件,为什么会显示跨域?转载的
在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 谷 ...
- php 如何获取一个json文件
function showupversion(){ #获取平台类型 $type='android'; #读取文件的路径 $url="D:/WWW/gm_lequ/gm_lequ"; ...
- 谷歌通过ajax获取本地JSON文件,为什么会提示跨域?
在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 下 ...
- NetCore 获取appsetting.json 文件中的配置
1. using Microsoft.Extensions.Configuration public class HomeController : Controller { public IConfi ...
- golang中如何将json文件解析成结构体
package tool import ( "bufio" "encoding/json" "fmt" "os" ) t ...
- 通过Jquery中Ajax获取json文件数据
1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...
随机推荐
- Linux常用命令之Yum
Linux Yum命令详解Yum全称Yellow dog Updater,Modified,是一个在Fedora和RedHat以及SUSE中提供的基于RPM包的软件包管理工具,能够从指定的服务器自动下 ...
- R画图的颜色搭配
colors()函数列出当前已经支持的颜色名称 [19] "bisque3" "bisque4" "black" [22] "bl ...
- MySql5.7多实例配置教程
最近朋友在搞在Linux上配置MySql5.7多实例教程,在网上查询了很多资料,一直报各种各样的错误,后来在网上搜了一篇博客,根据其配置,最近是配置成功了 参考配置连接:https://blog.cs ...
- python之路之简单介绍:
python介绍: a. python 基础 - 基础 - 基本的数据类型 - 函数 - 面向对象 python 安装 python 安装在os上 执行操作: 写一个文件,文件中按照python规则写 ...
- WEB学习笔记5-标准的HTML页面结构
完整的文档包含一下 <html> <head> </head> <body> </body> </html> 在HTML5规范中 ...
- java类.方法创建.继续调用
1.ctrl +n 创建类(首字母大写) 2.alt +s 选倒数第二个 创建方法(Superclass) 3.alt +s 选倒数第三个 创建带参数的方法(using fileds) 4.创建的vo ...
- 将数据转换成树型层级的Json格式的String
有时候我们项目里面需要将树型关系的数据转换成Json格式的String字符串 假设数据库中的数据如下 需要转换后输出的字符串的结果如下(对应的层级的关系) [ {name:'爷爷',id:'1',co ...
- Linux 学习之路 --------ip地址虚拟网络
// ifconfig 查看IP地址 网络信息 我的IP 39.161.136.25 ① 为网卡临时配置IP地址 ifconfig eth0 39.161.136.5 (netmask ...
- 小程序radio样式修改
.city-radio-group-label .city-label-radio { //label样式 padding: 15rpx 50rpx; position: relativ ...
- @EnableScheduling注解
@EnableScheduling 开启对定时任务的支持 其中Scheduled注解中有以下几个参数: 1.cron是设置定时执行的表达式,如 0 0/5 * * * ?每隔五分钟执行一次 ...