在 Vue + Codemirror 中优雅回显 JSON

💡 小技巧:在 Vue + Codemirror 中优雅回显 JSON

在开发后台管理系统时,经常会遇到需要在编辑器里 展示 JSON 数据 的场景。

如果直接把 JSON 字符串丢给 vue-codemirror,结果可能是 ------ 一整行的压缩数据,非常难看。

今天分享一个小技巧,让 JSON 在编辑器里自动格式化,更清晰易读。


🚨 使用前(问题)

直接赋值给 codemirror,数据会被压成一行:

json 复制代码
{"mcpServers":{"WebParser":{"type":"sse","description":"网页解析(WebParser)MCP 服务,一个专用于网页内容解析的工具包。","isActive":true,"name":"阿里云百炼_网页解析","url":"https://dashscope.aliyuncs.com/api/v1/mcps/WebParser/sse","headers":{"Authorization":"Bearer sk-63ff75f5081e4bf4a3d0ab8532e01924"}}}}

🎯 使用后效果

直接赋值给 codemirror,数据会被压成一行:

json 复制代码
{
  "mcpServers": {
    "WebParser": {
      "type": "sse",
      "description": "网页解析(WebParser)MCP 服务,一个专用于网页内容解析的工具包。",
      "isActive": true,
      "name": "阿里云百炼_网页解析",
      "url": "https://dashscope.aliyuncs.com/api/v1/mcps/WebParser/sse",
      "headers": {
        "Authorization": "Bearer sk-63ff75f5081e4bf4a3d0ab8532e01924"
      }
    }
  }
}

✅ 解决方案

在把数据传给 codemirror 之前,先用 JSON.stringify 进行格式化:

vue 复制代码
<template>
  <codemirror
    v-model="code"
    :extensions="extensions"
    style="height: 400px"
  />
</template>

<script setup>
import { ref } from "vue";
import { Codemirror } from "vue-codemirror";
import { json } from "@codemirror/lang-json";
import { oneDark } from "@codemirror/theme-one-dark";
import { EditorView } from "@codemirror/view";

const defaultExtensions = [json(), EditorView.lineWrapping];
const extensions = [...defaultExtensions, oneDark];

const rawData = {
  mcpServers: {
    WebParser: {
      type: "sse",
      description: "网页解析(WebParser)MCP 服务,一个专用于网页内容解析的工具包。",
      isActive: true,
      name: "阿里云百炼_网页解析",
      url: "https://dashscope.aliyuncs.com/api/v1/mcps/WebParser/sse",
      headers: {
        Authorization: "Bearer sk-63ff75f5081e4bf4a3d0ab8532e01924"
      }
    }
  }
};

// ✅ 格式化 JSON 再回显
const code = ref(JSON.stringify(rawData, null, 2));
</script>
  • 第二个参数 null → 表示不使用自定义替换器

  • 第三个参数 2 → 控制缩进空格数(常用 2 或 4)

相关推荐
liulilittle22 分钟前
C++ 浮点数封装。
linux·服务器·开发语言·前端·网络·数据库·c++
wordbaby34 分钟前
Expo 进阶指南:赋予 TanStack Query “原生感知力” —— 深度解析 AppState 与 NetInfo
前端·react native
Moment40 分钟前
从美团全栈化看 AI 冲击:前端转全栈,是自救还是必然 🤔🤔🤔
前端·后端·面试
天问一1 小时前
使用 Vue Router 进行路由定制和调用的示例
前端·javascript·vue.js
韩立学长2 小时前
【开题答辩实录分享】以《基于Vue的非遗文化知识分享平台的设计与实现》为例进行选题答辩实录分享
前端·javascript·vue.js
优弧2 小时前
离开舒适区100天,我后悔了吗?
前端·后端·面试
胡gh3 小时前
css的臂膀,前端动效的利器,还是布局的“隐形陷阱”?
前端·css·html
灵感菇_3 小时前
Flutter Riverpod 完整教程:从入门到实战
前端·flutter·ui·状态管理
用户21411832636023 小时前
紧急修复!Dify CVE-2025-55182 高危漏洞,手把手教你升级避坑
前端
Vic101013 小时前
解决 Spring Security 在异步线程中用户信息丢失的问题
java·前端·spring