vue 格式化展示json(含彩色样式)

实现原理

 通过函数 syntaxHighlight 使用html标签包装 json数据,并添加样式

完整范例代码

<template>
    <div style="width: 300px;">
        <pre v-html="formattedJSON"></pre>
    </div>
</template>
<script>
    function syntaxHighlight(json) {
        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) {
            var cls = 'number';
            if (/^"/.test(match)) {
                if (/:$/.test(match)) {
                    cls = 'key';
                } else {
                    cls = 'string';
                }
            } else if (/true|false/.test(match)) {
                cls = 'boolean';
            } else if (/null/.test(match)) {
                cls = 'null';
            }
            return '<span class="' + cls + '">' + match + '</span>';
        });
    }

    export default {
        mounted() {
            this.formattedJSON = syntaxHighlight(this.tabConfig)
        },
        data() {
            return {
                tabConfig: {
                    "defaultTab": "基础信息",
                    "tabList": [
                        {
                            "label": "基础信息",
                            "show": true
                        },
                        {
                            "label": "职业规划",
                            "age": 30,
                        },
                        {
                            "label": "相关要件",
                        }
                    ]
                },
                formattedJSON: ''
            }
        },
    }
</script>
<style scoped>
    /deep/ pre {
        outline: 1px solid #ccc;
        padding: 5px;
        margin: 5px;
    }

    /deep/ .string {
        color: green;
    }

    /deep/ .number {
        color: darkorange;
    }

    /deep/ .boolean {
        color: blue;
    }

    /deep/ .null {
        color: magenta;
    }

    /deep/ .key {
        color: red;
    }
</style>

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝阳39

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值