在Vue.js前端頁(yè)面中顯示完整JSON格式數(shù)據(jù)的實(shí)現(xiàn)方案
概述
本文檔記錄了如何在Vue.js前端頁(yè)面中將JSON字符串格式化顯示為可讀的、帶縮進(jìn)的JSON格式,類似于IDE中的代碼顯示效果。
問(wèn)題描述
當(dāng)后端返回的JSON數(shù)據(jù)是字符串格式時(shí),直接在前端顯示會(huì)呈現(xiàn)為壓縮的一行文本,不便于閱讀和調(diào)試。我們需要將其格式化為標(biāo)準(zhǔn)的JSON格式,包含適當(dāng)?shù)目s進(jìn)和換行。
解決方案
1. Vue組件實(shí)現(xiàn)
<template>
<div>
<pre>{{ formattedJson }}</pre>
</div>
</template>
<script setup>
import { computed } from 'vue';
// 示例JSON字符串(雙重編碼)模擬后端返回的數(shù)據(jù)
let str = '"[{\\"BusinessDate\\":\\"2025-09-11\\",\\"OtherID\\":null,\\"TransOutLines\\":[{\\"ItemInfo\\":{\\"ItemCode\\":\\"109-02-00001\\"},\\"StoreUOMQty\\":1.0000}]}]"';
// 格式化JSON字符串
const formattedJson = computed(() => {
try {
// 處理雙重編碼的JSON字符串
const parsedString = JSON.parse(str);
const parsedJson = JSON.parse(parsedString);
return JSON.stringify(parsedJson, null, 2);
} catch (error) {
console.error('JSON解析錯(cuò)誤:', error);
return 'JSON格式錯(cuò)誤';
}
});
</script>
<style scoped lang="scss">
pre {
background-color: #f8f8f8;
border: 1px solid #e1e1e1;
border-radius: 4px;
padding: 16px;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
font-size: 14px;
line-height: 1.5;
overflow-x: auto;
white-space: pre;
color: #333;
margin: 0;
}
</style>
2. 關(guān)鍵技術(shù)點(diǎn)
2.1 雙重JSON解析
// 第一次解析:解析外層字符串 const parsedString = JSON.parse(str); // 第二次解析:解析內(nèi)層JSON const parsedJson = JSON.parse(parsedString);
說(shuō)明:當(dāng)JSON數(shù)據(jù)被雙重編碼時(shí)(字符串中包含轉(zhuǎn)義的JSON),需要進(jìn)行兩次解析。
2.2 JSON格式化
JSON.stringify(parsedJson, null, 2)
參數(shù)說(shuō)明:
parsedJson: 要格式化的JSON對(duì)象null: 替換函數(shù)(這里不需要)2: 縮進(jìn)空格數(shù)
2.3 CSS樣式關(guān)鍵點(diǎn)
pre {
white-space: pre; // 保留所有空格和換行符
font-family: monospace; // 使用等寬字體
overflow-x: auto; // 水平滾動(dòng)條
background-color: #f8f8f8; // 背景色區(qū)分
}
使用場(chǎng)景
- API調(diào)試:顯示后端返回的JSON數(shù)據(jù)
- 數(shù)據(jù)預(yù)覽:在管理后臺(tái)展示配置數(shù)據(jù)
- 日志查看:格式化顯示日志中的JSON信息
- 開(kāi)發(fā)調(diào)試:臨時(shí)查看復(fù)雜的JSON結(jié)構(gòu)
常見(jiàn)問(wèn)題及解決方案
問(wèn)題1:JSON顯示為一行
原因:CSS樣式中缺少 white-space: pre 屬性
解決:確保pre標(biāo)簽包含正確的CSS樣式
問(wèn)題2:JSON解析失敗
原因:
- JSON字符串格式不正確
- 需要多次解析(雙重編碼)
- 特殊字符轉(zhuǎn)義問(wèn)題
解決:
try {
// 根據(jù)實(shí)際情況調(diào)整解析次數(shù)
let result = JSON.parse(str);
if (typeof result === 'string') {
result = JSON.parse(result);
}
return JSON.stringify(result, null, 2);
} catch (error) {
console.error('解析錯(cuò)誤:', error);
return '數(shù)據(jù)格式錯(cuò)誤';
}
問(wèn)題3:長(zhǎng)JSON內(nèi)容顯示不全
解決:添加滾動(dòng)條和最大高度限制
pre {
max-height: 500px;
overflow-y: auto;
overflow-x: auto;
}
總結(jié)
通過(guò)合理的JSON解析和CSS樣式設(shè)置,可以在前端頁(yè)面中優(yōu)雅地顯示格式化的JSON數(shù)據(jù)。關(guān)鍵點(diǎn)包括:
- 正確處理JSON字符串的編碼層級(jí)
- 使用
JSON.stringify()進(jìn)行格式化 - 設(shè)置合適的CSS樣式保持格式
- 添加錯(cuò)誤處理機(jī)制
這種方法簡(jiǎn)單有效,適用于大多數(shù)JSON數(shù)據(jù)展示場(chǎng)景。
以上就是在Vue.js前端頁(yè)面中顯示完整JSON格式數(shù)據(jù)的實(shí)現(xiàn)方案的詳細(xì)內(nèi)容,更多關(guān)于Vue前端顯示完整JSON數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue3如何自定義指令directive(如權(quán)限控制)
本文詳細(xì)介紹了如何在Vue3項(xiàng)目中創(chuàng)建自定義指令directive1,首先,在src/directives/index.ts文件中引入自定義指令,然后,創(chuàng)建src/directives/permission.ts文件來(lái)定義具體指令邏輯,在main.ts文件中引入并注冊(cè)該指令,最后,在頁(yè)面中使用自定義指令2024-12-12
Vue中的computed與watch底層實(shí)現(xiàn)原理最佳實(shí)踐
本文介紹Vue中computed和watch的底層實(shí)現(xiàn)原理,對(duì)比了核心概念、設(shè)計(jì)差異以及使用場(chǎng)景,通過(guò)分析computed的初始化、依賴追蹤、緩存機(jī)制,以及watch的初始化、深度監(jiān)聽(tīng)、異步更新,本文提供了一個(gè)全面的對(duì)比總結(jié),并給出了性能優(yōu)化和最佳實(shí)踐建議,感興趣的朋友一起看看吧2026-01-01
登錄頁(yè)面的實(shí)現(xiàn)及跳轉(zhuǎn)代碼實(shí)例(vue-router)
在Vue.js中可以使用vue-router來(lái)實(shí)現(xiàn)前端路由,通過(guò)路由來(lái)跳轉(zhuǎn)頁(yè)面,這篇文章主要給大家介紹了關(guān)于登錄頁(yè)面的實(shí)現(xiàn)及跳轉(zhuǎn)(vue-router)的相關(guān)資料,需要的朋友可以參考下2023-12-12
element中Select選擇器實(shí)現(xiàn)自定義顯示內(nèi)容
在我們很多前端業(yè)務(wù)開(kāi)發(fā)中,往往為了方便,都需要自定義一些用戶組件,本文主要介紹了element中Select選擇器實(shí)現(xiàn)自定義顯示內(nèi)容,感興趣的可以了解一下2023-12-12
Vue項(xiàng)目打包成Docker鏡像包的簡(jiǎn)單步驟
最近做時(shí)速云項(xiàng)目部署,需要將前端項(xiàng)目打成鏡像文件,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包成Docker鏡像包的簡(jiǎn)單步驟,需要的朋友可以參考下2023-10-10
Vue3.x的版本中build后dist文件中出現(xiàn)legacy的js文件問(wèn)題
這篇文章主要介紹了Vue3.x的版本中build后dist文件中出現(xiàn)legacy的js文件問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
詳解使用webpack打包編寫(xiě)一個(gè)vue-toast插件
本篇文章主要介紹了詳解使用webpack打包編寫(xiě)一個(gè)vue插件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue中實(shí)現(xiàn)展示與隱藏側(cè)邊欄功能
這篇文章主要介紹了vue中實(shí)現(xiàn)展示與隱藏側(cè)邊欄功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
vue前端導(dǎo)出多級(jí)表頭的excel表的示例代碼
本文主要介紹了vue前端導(dǎo)出多級(jí)表頭的excel表的示例代碼,可以使用xlsx庫(kù)來(lái)創(chuàng)建Excel文件,下面就來(lái)具體介紹一下,感興趣的可以了解一下2024-06-06

