中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue怎么實現Json格式數據展示

發布時間:2022-04-08 12:56:59 來源:億速云 閱讀:1291 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“vue怎么實現Json格式數據展示”,內容詳細,步驟清晰,細節處理妥當,希望這篇“vue怎么實現Json格式數據展示”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Json格式數據展示

vue的jsonViewer組件也很好用,在網上看到有大神自己寫的組件(遞歸調用),覺得很好,稍作修改,記錄一下

JSON.stringify(obj, null, 4)

可以美化json數據的顯示 

<span class="light">要高亮的內容</span> 在json數據中,如果有需要高亮的內容,用以上標簽包起來(這個要處理數據實現了,組件里高亮樣式可以根據需要自己修改)

<template>
    <div class="bgView">
        <div :class="['json-view', length ? 'closeable' : '']" :>
            <span @click="toggleClose" :class="['angle', innerclosed ? 'closed' : '']" v-if="length"></span>
            <div class="content-wrap">
                <p class="first-line">
                    <span v-if="jsonKey" class="json-key">"{{jsonKey}}": </span>
                    <span v-if="length" @click="toggleClose" >
                       {{prefix}}
                       {{innerclosed ? ('... ' + subfix) : ''}}
                        <!-- <span class="json-note">
                       {{innerclosed ? (' // count: ' + length) : ''}}
                        </span> -->
                    </span>
                    <span v-if="!length">{{isArray ? '[]' : '{}'}}</span>
                </p>
                <div v-if="!innerclosed && length" class="json-body">
                    <template v-for="(item, index) in items">
                        <json-view v-if="item.isJSON"
                                :closed="closed"
                                :key="index"
                                :json="item.value"
                                :jsonKey="item.key"
                                :depth="depth+1"
                                :expandDepth="expandDepth"
                                :isLast="index === items.length - 1"></json-view>
                        <p v-else class="json-item" :key="index">
                            <span class="json-key">
                            {{(isArray ? '' : '"' + item.key + '":')}}
                            </span>
                            <span class="json-value" v-html="item.value + (index === items.length - 1 ? '' : ',')"/>
                        </p>
                    </template>
                    <!--                    <span v-show="!innerclosed" class="body-line"></span>-->
                </div>
                <p v-if="!innerclosed && length" class="last-line">
                    <span>{{subfix}}</span>
                </p>
            </div>
        </div>
    </div>
</template>
<script>
    export default {
        name: 'jsonView',
        props: {
            json: [Object, Array],
            jsonKey: {
                type: String,
                default: ''
            },
            closed: {
                type: Boolean,
                default: true
            },
            isLast: {
                type: Boolean,
                default: true
            },
            fontSize: {
                type: Number,
                default: 13
            },
            expandDepth: {
                type: Number,
                default: 0
            },
            depth: {
                type: Number,
                default: 0
            }
        },
        created() {
            this.innerclosed = !this.closed ? this.closed : this.depth >= this.expandDepth
            this.$watch('closed', () => {
                this.innerclosed = this.closed
            })
        },
        data() {
            return {
                innerclosed: true
            }
        },
        methods: {
            isObjectOrArray(source) {
                const type = Object.prototype.toString.call(source)
                const res = type === '[object Array]' || type === '[object Object]'
                return res
            },
            toggleClose() {
                if (this.innerclosed) {
                    this.innerclosed = false
                } else {
                    this.innerclosed = true
                }
            }
        },
        computed: {
            isArray() {
                return Object.prototype.toString.call(this.json) === '[object Array]'
            },
            length() {
                return this.isArray ? this.json.length : Object.keys(this.json).length
            },
            subfix() {
                return (this.isArray ? ']' : '}') + (this.isLast ? '' : ',')
            },
            prefix() {
                return this.isArray ? '[' : '{'
            },
            items() {
                if (this.isArray) {
                    return this.json.map(item => {
                        const isJSON = this.isObjectOrArray(item)
                        return {
                            value: isJSON ? item : JSON.stringify(item),
                            isJSON,
                            key: ''
                        }
                    })
                }
                const json = this.json
                return Object.keys(json).map(key => {
                    const item = json[key]
                    const isJSON = this.isObjectOrArray(item)
                    return {
                        value: isJSON ? item : JSON.stringify(item),
                        isJSON,
                        key
                    }
                })
            }
        }
    }
</script>
<style>
    .bgView {
        background-color: #efefef;
        font-family: NotoSansCJKkr;
    }
 
    .json-view {
        position: relative;
        display: block;
        width: 100%;
        height: 100%;
        /* white-space: nowrap; */
        padding: 0 20px;
        box-sizing: border-box;
        line-height: 30px;
    }
 
    .json-note {
        color: #909399;
    }
 
    .json-key {
        color: #333333;
    }
 
    .json-value {
        color: #333333;
    }
 
    .json-item {
        margin: 0;
        padding-left: 20px;
    }
 
    .first-line {
        padding: 0;
        margin: 0;
    }
 
    .json-body {
        position: relative;
        padding: 0;
        margin: 0;
    }
 
    .json-body .body-line {
        position: absolute;
        height: 100%;
        width: 0;
        border-left: dashed 1px #bbb;
        top: 0;
        left: 2px;
    }
 
    .last-line {
        padding: 0;
        margin: 0;
    }
 
    .angle {
        position: absolute;
        display: block;
        cursor: pointer;
        float: left;
        width: 20px;
        text-align: center;
        left: 0;
    }
 
    .angle::after {
        content: "";
        display: inline-block;
        width: 0;
        height: 0;
        vertical-align: middle;
        border-top: solid 4px #333;
        border-left: solid 6px transparent;
        border-right: solid 6px transparent;
    }
 
    .angle.closed::after {
        border-left: solid 4px #333;
        border-top: solid 6px transparent;
        border-bottom: solid 6px transparent;
    }
 
    .light {
        color: #0595ff;
    }
</style>

vue解析json數據

在前端接授到json后,使用JSON.parse(jsonObject)就可以解析!(jsonObject為json對象)

讀到這里,這篇“vue怎么實現Json格式數據展示”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永新县| 建阳市| 华蓥市| 甘德县| 阿城市| 仙游县| 会昌县| 大庆市| 建昌县| 皋兰县| 邮箱| 永福县| 建德市| 棋牌| 周宁县| 元谋县| 富锦市| 萍乡市| 沂南县| 攀枝花市| 永兴县| 大丰市| 广安市| 广德县| 仙桃市| 东源县| 丁青县| 尼勒克县| 隆德县| 蓝田县| 夹江县| 龙海市| 台山市| 乳山市| 馆陶县| 西宁市| 静宁县| 当阳市| 尚义县| 蓝山县| SHOW|