Vue中使用JsonView进行JSON数据展示

embedded/2025/4/2 5:52:19/

image

前言

  最近在开发公司的管理系统的操作日志模块,要查看某条操作日志的请求参数,要将请求的参数以 JSON 格式的形式展示出来,于是用到了Vue-JSON-Viewer 这个插件。

一、Vue-JSON-Viewer 基础入门

插件简介

  Vue-JSON-Viewer 是一个用于在Vue项目中展示JSON数据的组件,它解决了在项目开发中面临的展示JSON数据的需求,尤其是当JSON文件体积较大时,也可以快速渲染。用官方的话来说,就是一个专为 Vue.js 框架设计的简单 JSON 查看器组件,兼容 Vue.js 2.x 及 3.x,并支持服务器端渲染(SSR)。此项目由 JavaScript 编写,采用 MIT 许可证分发,是处理和展示 JSON 数据的理想选择,尤其是对于那些需要以可视化方式查看复杂数据结构的开发者来说。

官网地址: https://www.npmjs.com/package/vue-json-viewer

安装插件

  安装插件时,可能会遇到因 Vue 版本不匹配导致的安装或运行错误,确保你的 Vue 项目版本与 Vue-JSON-Viewer 的分支相匹配。本文基于 npm 的安装 Vue-JSON-Viewer 插件,执行命令如下:

# 对于 Vue 2.x
npm install vue-json-viewer@2 --save# 对于 Vue 3.x
npm install vue-json-viewer@3 --save

【注意】如果npm安装报错,可换成 cnpm 安装。

引入插件

  安装完成后,在项目入口文件中正确引入并注册该组件。引入插件有两种方式,可以全局引入,也可以在单个页面文件中引入该插件。如果在全局 main.js 中引入,那么全局可用,无需在单独页面中引入,可直接调用组件。如果在单页面中使用,则需要引入,才可正常使用。代码如下:

import Vue from 'vue';
import JsonViewer from 'vue-json-viewer';// 非全局的不用写这个,直接在组件中使用标签引入
Vue.use(JsonViewer) 

使用插件

  初次使用者可能不知道如何正确地将数据传递给 Vue-JSON-Viewer 组件,或者遇到数据更新组件未响应的情况。我们可以使用 :value 属性来绑定 JSON 数据,如下所示:

<script setup lang="ts">
import JsonViewer from 'vue-json-viewer'const jsonStr = '{"data":[{"name":"蒙奇·D·路飞","age":18,"sex":"男","address":"风车村"},' +'{"name":"娜美","age":19,"sex":"女","address":"东海欧伊科特王国"}]}';// 注意:绑定得数据一定是JSON,而不是JSON字符串
const jsonData = JSON.parse(jsonStr);
</script>
<template><json-viewer :value="jsonData" copyable></json-viewer>
</template>

  其中,value 代表显示的JSON数据,copyable 表示可以复制。效果如下图所示:

image

  对于动态数据更新,确保你的数据对象是响应式的(在 Vue 实例的 data 函数返回的对象里)。如果动态赋值的话,后台数据返回的可能是一个字符 json,需要 string类型的json串转换为json格式 处理才能使用,否则会引起报错。

二、组件的属性、方法

选项

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

事件

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

  点击 copy 后,若是我们需要看到被复制后的反应信息提示的话,就需要为复制进行一个事件监听。这时候,就需要添加一个 @copied 事件即可。

Slots

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

三、组件扩展

自定义复制按钮

<script setup lang="ts">
import JsonViewer from 'vue-json-viewer'const jsonStr = '{"data":[{"name":"蒙奇·D·路飞","age":18,"sex":"男","address":"风车村"},' +'{"name":"娜美","age":19,"sex":"女","address":"东海欧伊科特王国"}]}';// 注意:绑定得数据一定是JSON,而不是JSON字符串
const jsonData = JSON.parse(jsonStr);
const copyable = ref({copyText: '复制',copiedText: '复制完成',timeout: 2000
})
</script>
<template><json-viewer :value="jsonData" :copyable="copyable"></json-viewer>
</template>

image

自定义主题

  添加 theme="my-awesome-json-theme" Vue-JSON-Viewer 的组件属性,复制粘贴下面的模板并且根据自定义的theme名称做对应调整:

.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;}}}}
}

四、附录

常见问题

  使用这个插件碰到一个问题就是,引入之后报错 import JsonViewer from 'vue-json-viewer' 爆红,提示

在这里插入图片描述

  解决办法是创建一个 vue-json-viewer.d.ts 文件,增加如下内容:

declare module 'vue-json-viewer';

五、小结

  初次使用者可能会忽略组件提供的自定义选项,导致无法充分利用其功能。了解如何通过属性如 boxed、copyable、sort 来调整组件外观和行为,若要进一步定制样式,可以通过覆盖 CSS 类的方式调整,Vue-JSON-Viewer 提供了一系列默认类名,允许个性化设计。利用监听器(@copied)等事件,可以在用户复制数据时执行特定操作,增强用户体验。

  通过遵循这些步骤,新用户能够更顺利地集成并利用 Vue-JSON-Viewer 进行JSON数据的展示和管理,提升开发效率和应用的用户体验。

image


http://www.ppmy.cn/embedded/177341.html

相关文章

Vue3 其它API readonly和shallowreadonly

Vue3 其它API readonly和shallowreadonly readonly&#xff0c;只读&#xff0c;a是可以修改值的&#xff0c;a1不能shallowreadonly&#xff0c;浅层次只读&#xff0c;b中所有属性的值是可以修改&#xff0c;b1中name不能修改&#xff0c;其它可以修改 let a ref(123); le…

SRT协议

SRT&#xff08;Secure Reliable Transport&#xff09;是一种开源的视频传输协议&#xff0c;专为高丢包、高延迟网络环境设计&#xff0c;结合了UDP的低延迟和TCP的可靠性&#xff0c;广泛应用于直播、远程制作、视频会议等场景。 定位&#xff1a;SRT协议的官方C/C实现库&am…

JavaScript时间戳的使用

1、什么是时间戳 在 JavaScript 中,时间戳(Timestamp)通常指自 1970 年 1 月 1 日 00:00:00 UTC(Unix 纪元)以来的毫秒数。时间戳(timestamp)是一个能够表示一份数据在某个特定时间点已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。它…

mathtype一些用法总结

1.一个是公式旁边加入||&#xff0c;一般使用键盘直接打入的会比较小&#xff0c;mathtype中的会好看很多&#xff0c;打开这个栏目&#xff0c;会看到有很多。 2.另外是带^符号&#xff0c;在字符上面带没有办法直接带&#xff0c;所以可以在mathtype中先加帽子&#xff0c;然…

使用HTML5和CSS3实现3D旋转相册效果

使用HTML5和CSS3实现3D旋转相册效果 这里写目录标题 使用HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现思路1. HTML结构2. CSS样式解析2.1 基础样式设置2.2 3D效果核心样式2.3 卡片样式 3. JavaScript交互实现3.1 旋转控制3.2 自动播放功能 技术要点总结项目亮点总…

Milvus Java SDK

Java&#xff08;8 或更高版本&#xff09; 安装步骤 1. 获取源码或依赖引入 Apache Maven <dependency><groupId>io.milvus</groupId><artifactId>milvus-sdk-java</artifactId><version>2.5.5</version> </dependency> …

【Python】编程50个经典操作

一、字符串操作 1、字符串反转 s "hello" print(s[::-1]) # olleh 2、字符串拼接 words ["python", "is", "awesome"] print(" ".join(words)) # python is awesome 3、字符串格式化&#xff08;f-string&#xff…

常⻅中间件漏洞--Tomcat

tomcat是⼀个开源⽽且免费的jsp服务器&#xff0c;默认端⼝ : 8080&#xff0c;属于轻量级应⽤服务器。它可以实现 JavaWeb程序的装载&#xff0c;是配置JSP&#xff08;Java Server Page&#xff09;和JAVA系统必备的⼀款环境。 1.CVE-2017-12615 Tomcat put⽅法任意⽂件写…