当前位置:   article > 正文

分享将json格式的数据格式化展示到界面中,高亮、折叠、自定义样式_json响应体可折叠

json响应体可折叠

一. 格式化json数据,高亮、自定义样式

  1. 定义处理函数
  2. 调用函数,将待处理的数据传入
  3. 利用<pre v-html></pre>标签(格式化文本)展示
// 1. 定义处理函数,在这里实现样式的自定义
export default function syntaxHighlight(json:any){
	if (typeof json != 'string') {
		json = JSON.stringify(json, undefined, 2);
	}
	json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
	return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(match) {
		let cls = 'color:#D19A66';
		if (/^"/.test(match)) {
			if (/:$/.test(match)) {
				cls = 'color:#F92A0F';
			} else {
				cls = 'color:#44C91B';
			}
		} else if (/true|false/.test(match)) {
			cls = 'color:#1B73C9';
		} else if (/null/.test(match)) {
			cls = 'color:#C586C0';
		}
		return `<span style=${cls}>${match}</span>`;
	});
}

// 2. 调用函数,将待处理的数据传入
const data = reactive({
  code:'200',
  message:'成功',
  data:[
	{
	  name:'三国演义',
	  id:'sgyy'
	},
	{
	  name:'西游记',
	  id:'xyj'
	}
  ]
})
const jsonData = syntaxHighlight(data)

// 3. 利用`<pre v-html></pre>`标签(格式化文本)展示
<pre v-html="jsonData"></pre>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

在这里插入图片描述

二. 格式化json数据,折叠、自定义样式

  1. 安装插件:
// 在vue2中
npm install vue-json-viewer --save

// 在vue3中
npm install clipboard --save
npm install vue3-json-viewer --save
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 引入并注册
// 在vue2中
import JsonViewer from 'vue-json-viewer'
Vue.use(JsonViewer)

// 在vue3中
import JsonViewer from "vue3-json-viewer"
const app=createApp(App)
app.use(JsonViewer)
app.mount('#app')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 使用
<json-viewer 
	:value="jsonData" 
	:expand-depth="5" 
	copyable 
	boxed 
	sort
	theme="my-json-theme">
</json-viewer>

// 自定义主题样式
// vue2中
.my-json-theme{
	// vue2样式穿透
	/deep/ .jv-key{}
	/deep/ .jv-item{}
	/deep/ .jv-string{}
	/deep/ .jv-boolean{}...
}

// vue3中
.jv-my-json-theme{
	:deep(.jv-key){}...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  1. api说明
参数说明默认值
valueJSON数据(支持和v-model一起之用)必填
expand-depth默认展开的层级1
copyable显示复制按钮,可自定义按钮{copyText:‘copy’},或者使用truefalse
sort按照key排序(key的首字母的顺序)false
boxed给组件添加一个盒状样式false
theme添加一个自定义的样式class用作主题jv-light
  1. 效果
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/861750
推荐阅读
相关标签
  

闽ICP备14008679号