根据获取的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基本书写格式 : ...
随机推荐
- 深度学习(pytorch)-1.基于简单神经网络的图片自动分类
这是pytorch官方的一个例子 官方教程地址:http://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-b ...
- ionic 3.0中使用原生插件ionic-native
作为一个ionic的新手,今天使用了ionic的原生粘贴板插件 @ionic-native/clipboard,根据ionic官方文档上执行的命令 $ ionic cordova plugin ad ...
- 2018-计算机系机试(第二批)-B-二进制输出
B. 二进制输出 单点时限: 1.0 sec 内存限制: 256 MB 输入一个十进制表示的非负整数,输出其 8 位二进制表示. 例如:输入 10 ,输出 00001010. 输入格式 一行一个非负整 ...
- ChIP-seq基本流程及工具
ChIP-seq数据分析整理 1.Alignment 2.Peak detection 3.Peak annotation 1. GO analysis 2. Pathway analysis 4.D ...
- 华莱士的 第二个python程序之(格式化输出)
name = input("name:")age = input("age:")info ='''---------- info of %s --------- ...
- Altium Designer 10 执行DRC发现有 Length Constraint 解决办法
在PCB布局连线结束后,执行DRC,结果Length Constraint 报错,如图: 在Design Rules中找对应的规则约束,怎么也找不见. 其实是,在差分对进行等长蛇形绕线的步骤中,约束了 ...
- 04PHP HTML状态保持
HTTP无状态:会话时没有储存数据 HTTP状态保持: 1.Cookie:保存在浏览器 $_COOKIE[ ] 超全局变量 数组 不安全,用户可清楚数据时把Cookie清除 ==目的:多页面之间 ...
- Codeforces 977D: Divide by three, multiply by two(暴力)
题意 有nnn个无序的数,对这些数进行排列,要求ai=3×ai+1a_i=3\times a_{i+1}ai=3×ai+1或2×ai=ai+12\times a_i=a_{i+1}2×ai=ai ...
- SQA计划
一.SQA计划 1.软件工程 所做程序是一个长沙大学的学习app系统 .可以实现用户的注册登录,课程学习,以及活动参加.根据需求建模,进行体系结构设计,然后设计. 2.质量保证 (1)项目需要符合IE ...
- mysql并发更新
mysql并发更新 常见方案 乐观锁 select * from tab1 where id = ?; update tab1 set col1 = ? where id = ? and versio ...