vue 与 vue-json-viewer 实现 JSON 数据可视化

前言

接口的调试和测试是确保系统稳定性的重要步骤。为了让开发人员和测试人员能够直观地查看接口返回的 JSON 数据,使用合适的工具至关重要。vue-json-viewer 插件为 vue 开发者提供了一个简单而强大的解决方案。本文将详细介绍如何在 vue 项目中使用该插件,帮助你快速上手,提升接口测试的效率。


一、vue-json-viewer

vue-json-viewer 是一个用于在 vue.js 应用中展示 JSON 数据的插件。它提供了一种直观和美观的方式来可视化 JSON 数据,特别适合用于调试和展示 API 返回的数据。

为什么要选择 vue-json-viewer?

  • 易于使用
    插件的使用非常简单,只需安装并在 vue 组件中引入即可使用,适合快速集成到现有项目中。

  • 美观的展示
    vue-json-viewer 提供了友好的用户界面,能够以树形结构展示 JSON 数据,便于用户理解和查看数据层级。

  • 支持复制功能
    插件内置了复制功能,用户可以轻松复制 JSON 数据,方便进行调试或分享。

  • 主题支持
    插件支持自定义主题,开发者可以根据项目的设计风格调整 JSON 数据的展示样式。

  • 预览模式
    提供预览模式,可以在不展开所有数据的情况下,快速查看 JSON 数据的结构。

1.1 配置

属性描述默认值
valuejson对象的值,可以使用v-model,支持响应式必填
expand-depth默认展开的层级1
copyable展示复制按钮,默认文案为:copy、copied!, 你可以设置一个对象{copyText: ‘copy’, copiedText: ‘copied’} 来自定义复制按钮文案false
sort按照key排序展示false
boxed为组件添加一个盒样式false
theme添加一个自定义的样式class用作主题jv-light
expanded默认展开视图false
timeformat自定义时间格式函数time => time.toLocaleString()
preview-mode不可折叠模式,默认全部展开false
show-array-index是否显示数组索引true
show-double-quotes展示key双引号false

1.2 事件

事件描述
copied复制文本后的事件
keyclick点击key的事件

1.3 Slots

名称描述Scope
copy自定义拷贝按钮{copied: boolean}

1.4 快捷键

名称描述
alt + click展开当前节点下的所有节点

二、安装

可以通过 npmyarn 安装 vue-json-viewer 插件。

npm install vue-json-viewer --save

yarn add vue-json-viewer

三、注册引入

3.1 全局注册组件

在全局 main.js 中引入并注册。

import JsonViewer from 'vue-json-viewer'
Vue.use(JsonViewer)

3.2 单个组件引入

import JsonViewer from 'vue-json-viewer'
export default {components:{ JsonViewer }
}

四、基础使用

<template><div><json-viewer :value="jsonData"></json-viewer></div>
</template><script>
import JsonViewer from "vue-json-viewer";
export default {components: { JsonViewer },data() {return {jsonData: {total: 25,limit: 10,skip: 0,links: {previous: undefined,next: function() {},},},};},
};
</script>

实现效果
在这里插入图片描述


五、主题样式

  • 有两个办法创建自定义主题 (e.g. my-awesome-json-theme)
    1. 添加 theme="my-awesome-json-theme" JsonViewer 的组件属性;
    2. 复制粘贴下面的模板并且根据自定义的theme名称做对应调整。
// values are default one from jv-light template
.my-awesome-json-theme {background: #fff;white-space: nowrap;color: #525252;font-size: 14px;font-family: Consolas, Menlo, Courier, monospace;.jv-ellipsis {color: #999;background-color: #eee;display: inline-block;line-height: 0.9;font-size: 0.9em;padding: 0px 4px 2px 4px;border-radius: 3px;vertical-align: 2px;cursor: pointer;user-select: none;}.jv-button { color: #49b3ff }.jv-key { color: #111111 }.jv-item {&.jv-array { color: #111111 }&.jv-boolean { color: #fc1e70 }&.jv-function { color: #067bca }&.jv-number { color: #fc1e70 }&.jv-number-float { color: #fc1e70 }&.jv-number-integer { color: #fc1e70 }&.jv-object { color: #111111 }&.jv-undefined { color: #e08331 }&.jv-string {color: #42b983;word-break: break-word;white-space: normal;}}.jv-code {.jv-toggle {&:before {padding: 0px 2px;border-radius: 2px;}&:hover {&:before {background: #eee;}}}}
}

实现效果

在这里插入图片描述


六、结合业务需求实现代码

<template><div class="serviceTesting"><div class="nav"><span /><h3>接口数据测试</h3></div><el-card class="box-card"><div class="content"><p>接口</p><el-selectv-model="form.address"clearableplaceholder="请选择内置接口"@change="onChange"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option></el-select><p>GET</p><el-input v-model="form.way" placeholder="请输入接口地址" disabled> </el-input><el-buttontype="primary"icon="el-icon-s-promotion":disabled="throttle"@click="onSend">发送</el-button></div><div class="forms"><h4>参数列表</h4><div class="line" /><el-table :data="tableData" border style="width: 100%"><el-table-column prop="name" label="参数名"><template slot-scope="scope"><el-input v-model="scope.row.name" clearable size="mini"></el-input></template></el-table-column><el-table-column prop="value" label="参数值"><template slot-scope="scope"><el-input v-model="scope.row.value" clearable size="mini"></el-input></template></el-table-column><el-table-column prop="required" label="是否必填"><template slot-scope="scope"><el-switchv-model="scope.row.must"active-color="#13ce66"inactive-color="#ff4949"disabled></el-switch></template></el-table-column><el-table-column prop="describe" label="参数描述"></el-table-column></el-table></div></el-card><divv-loading="throttle"element-loading-text="拼命加载中"element-loading-spinner="el-icon-loading"element-loading-background="rgba(0, 0, 0, 0.8)":value="content"class="result"><el-card class="box-card"><h4>响应结果</h4><div class="line" /><json-viewerv-if="content !== null":copyable="{ copyText: '复制', copiedText: '已复制' }"theme="my-awesome-json-theme":preview-mode="true"></json-viewer><div v-else><el-empty description="选择接口输入参数点击发送按钮获取响应结果"></el-empty></div></el-card></div></div>
</template><script>import JsonViewer from 'vue-json-viewer'export default {components: {JsonViewer},data() {return {options: [{value: '0',label: '测试接口1'},{value: '1',label: '测试接口2'}],form: {address: '',way: ''},tableData: [{name: '',value: '',must: false,describe: ''}],content: null,throttle: false}},methods: {onSend() {if (!this.form.address) {this.$message.warning('请选择接口地址')return}if (!this.tableData[0].name) {this.$message.warning('请输入参数名')return}if (!this.tableData[0].value) {this.$message.warning('请输入参数值')return}this.throttle = true// 请求接口port({}).then(res => {this.throttle = falseif (res.code === '0') {this.content = res.data}})},onChange() {this.content = nullthis.tableData = [{name: '',value: '',must: false,describe: ''}]}}}
</script><style lang="less" scoped>.serviceTesting {padding: 16px;.nav {display: flex;align-items: center;margin-bottom: 16px;span {display: inline-block;width: 8px;height: 22px;background: #409eff;margin-right: 5px;}}.content {display: flex;align-items: center;margin-bottom: 10px;.el-select {width: 300px;margin-right: 10px;}p {font-weight: bold;min-width: 30px;margin-right: 10px;}.el-button {margin-left: 10px;}}.el-card {padding: 10px;}h4 {text-align: left;}.line {width: 100%;height: 1px;background: rgb(246, 246, 246);margin: 10px 0;}.result {margin-top: 16px;}}::v-deep {.el-card .el-card__body {text-align: left;}.my-awesome-json-theme {background: #fff;white-space: nowrap;color: #525252;font-size: 14px;font-family: Consolas, Menlo, Courier, monospace;.jv-ellipsis {color: #999;background-color: #eee;display: inline-block;line-height: 0.9;font-size: 0.9em;padding: 0px 4px 2px 4px;border-radius: 3px;vertical-align: 2px;cursor: pointer;user-select: none;}.jv-button {color: #49b3ff;}.jv-key {color: #111111;}.jv-item {&.jv-array {color: #111111;}&.jv-boolean {color: #fc1e70;}&.jv-function {color: #067bca;}&.jv-number {color: #fc1e70;}&.jv-number-float {color: #fc1e70;}&.jv-number-integer {color: #fc1e70;}&.jv-object {color: #111111;}&.jv-undefined {color: #e08331;}&.jv-string {color: #42b983;word-break: break-word;white-space: normal;}}.jv-code {.jv-toggle {&:before {padding: 0px 2px;border-radius: 2px;}&:hover {&:before {background: #eee;}}}}}}
</style>

实现效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Pygame Zero 画矩形(空心、实心、多个矩形、多层同心矩形、彩虹条矩形、条纹相间、随机颜色矩形、特殊效果、渐变效果)

用Pygame Zero 画矩形 &#xff08;空心、实心、多个矩形、多层同心矩形、彩虹条矩形、条纹相间、随机颜色矩形、特殊效果、渐变效果&#xff09; 本文目录&#xff1a; 零、时光宝盒 一、绘制空心矩形 二、绘制实心矩形 三、画多个静止矩形 四、绘制多层同心矩形 4.1、…

【Rust自学】11.9. 单元测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.9.1. 测试的分类 Rust把测试分为两类&#xff0c;一个是单元测试&#xff0c;一个是集成测试。 单元测试比较小也比较专注&#xff…

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue 优先级队列表示为平衡二进制堆&#xff1a; queue[n] 的两个子级是 queue[2*n1] 和 queue[2*&#xff08;n1&#xff09;]。 注&#xff1a;左子节点index2*parentIndex1,右子节点index2*parentIndex2,源码中计算parent位置时就是这样反过来计算的 优…

回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测

回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测 目录 回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

MySQL批量修改数据表编码及字符集为utf8mb4

​​​​​​MySQL批量修改数据表编码及字符集为utf8mb4 utf8mb4编码是utf8编码的超集&#xff0c;兼容utf8&#xff0c;并且能存储4字节的表情字符。 采用utf8mb4编码的好处是&#xff1a;存储与获取数据的时候&#xff0c;不用再考虑表情字符的编码与解码问题。 更改数据库…

Edge浏览器网页设置深色模式/暗模式

文章目录 需求分析1. 浏览器中的设置——外观——深色。2. 在Edge浏览器的地址栏如下网址&#xff1a;edge://flags/&#xff0c;直接搜索Dark则有内容弹出&#xff0c;将Default更改为Enable即可设置成功。3. 成果 需求 长期对着电脑屏幕&#xff0c;白色实在太刺眼&#xff…

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…

基于FPGA的多功能数字钟设计

基于FPGA的多功能数字钟设计 前言基础知识按键数码管 系统概述按键使用说明模块描述模块设计button_debouncebutton_controllerclock_controllerdigital_tube 整体资源用量测试视频 前言 本工程主要是数码管、按键、LED的应用开发。 注&#xff1a;本工程所有IP均使用源码开发…

利用开源AI智能名片2+1链动模式S2B2C商城小程序拓展社交电商的深度实践探索

摘要&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;社交电商作为一种新兴的商业模式&#xff0c;正以前所未有的速度改变着消费者的购物习惯与商家的营销策略。本文深入探讨了开源AI智能名片21链动模式S2B2C商城小程序在社交电商领域的应用&#xff0c;通过分析其核心机制…

【优选算法篇】:模拟算法的力量--解决复杂问题的新视角

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计&#xff0c;包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈&#xff1a;没有任何元素 入栈&#xff1a;插入元素消息 出…

C++中的条件变量(condition_variable)详解:小白版

在编程中&#xff0c;我们经常需要处理多个任务&#xff0c;这些任务可能需要同时运行&#xff0c;也可能需要按照一定的顺序运行。这就涉及到了线程的概念。线程就像是一个小程序&#xff0c;它可以在程序中独立运行&#xff0c;而且可以和其他线程并行执行。 但是&#xff0…

【python】OpenCV—Local Translation Warps

文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、参考 1、功能描述 利用液化效果实现瘦脸美颜 交互式的液化效果原理来自 Gustafsson A. Interactive image warping[D]. , 1993. 2、原理分析 上面描述很清晰了&#xff0c;鼠标初始在 C&#xff0c;也即…

STM32标准库学习笔记(十)SPI

前言 学习永无止境&#xff01;本篇是嵌入式开发之片上外设SPI&#xff0c;了解基本硬件原理以及通信协议。 注&#xff1a;本文章为学习笔记&#xff0c;部分图片与文字来源于网络/江协科技课程/手册&#xff0c;如侵权请联系&#xff01;谢谢&#xff01; 一、SPI通信概述 1.…

从github上,下载的android项目,从0-1进行编译运行-踩坑精力,如何进行部署

因为国内的网络原因&#xff0c;一直在anroidstudio开发的问题上&#xff0c;是个每个开发者都会踩坑 一直以为是自己的原因&#xff0c;其实很多都是国内网络的原因&#xff0c;今天就从一个开发者的视角 把从github上一个陌生的项目&#xff0c;如何通过本地就行运行的 首先…

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…

使用Dify创建个问卷调查的工作流

为啥要使用Dify创建工作流呢&#xff1f;一个基于流程的智能体的实现&#xff0c;特别是基于业务的实现&#xff0c;使用Dify去实现时&#xff0c;通常都是一个对话工作流&#xff0c;当设计到相对复杂一些的流程时&#xff0c;如果将所有逻辑都放在对话工作流中去实现&#xf…

toRef 和 toRefs 详解及应用

在 Vue 3 中&#xff0c;toRef 和 toRefs 是两个用于创建响应式引用的工具&#xff0c;主要用于组合式 API&#xff08;Composition API&#xff09;的场景中 1. toRef 定义 toRef 将某个对象的某个属性包装成一个响应式引用。这样可以直接对该引用进行操作&#xff0c;而不需…