Vue3项目JSON格式化工具技术实现详解

简介: 本文详解JSON格式化工具的前端实现,涵盖Composable核心逻辑(格式化、压缩、自动修复)与Vue交互优化(防抖预览、高亮动态加载、实时错误反馈),代码简洁高效,体验流畅。

JSON格式化工具技术实现详解

本文深入解析本项目中JSON格式化工具的前端实现,涵盖核心算法(Composable)与界面交互(Vue)。

在线工具网址:https://see-tool.com/encoding-converter

工具截图:
工具截图.png

一、核心逻辑 (Composable Implementation)

业务逻辑封装在 useJsonFormatter 中,实现纯函数的逻辑复用。

1. 格式化 (Format)

利用 JSON.stringify 的第三个参数控制缩进。

const formatJson = (input, escape = false) => {
   
    let formatted = JSON.stringify(JSON.parse(input), null, 2);
    // 二次序列化实现转义:JSON.stringify(str).slice(1, -1)
    return escape ? JSON.stringify(formatted).slice(1, -1) : formatted;
};

2. 压缩 (Minify)

去除 space 参数即可移除空白。

const minifyJson = (input) => JSON.stringify(JSON.parse(input));

3. 自动修复 (Auto Fix)

针对非标准JSON(如有损粘贴),采用“正则替换 + JS执行”的双重降级策略。

  1. 正则预处理:替换单引号、移除尾随逗号、给Key加引号。
  2. 兜底解析:若 JSON.parse 失败,使用 new Function 解析JS对象字面量(如 {a:1})。

二、界面交互 (Vue Page Implementation)

UI层主要处理状态管理、实时反馈与性能优化。

1. 防抖实时预览

为了提供流畅体验,输入框绑定了防抖(Debounce)监听器。用户停止输入500ms后自动触发静默格式化。

// watch debounce 实现
let timer = null;
watch([jsonInput, escapeOutput], () => {
   
    if(timer) clearTimeout(timer);
    timer = setTimeout(() => {
   
        if(jsonInput.value.trim()) {
   
            handleFormat(true); // true 表示静默模式,不弹出的Toast提示
        }
    }, 500);
})

2. 高亮库的动态加载 (Performance)

highlight.js 体积较大,仅在客户端挂载时动态引入,避免阻塞服务端渲染(SSR)首屏。

onMounted(async () => {
   
    if (!process.client) return;

    // 动态创建 script 标签加载 CDN 资源
    // 优先复用 window.hljs 避免重复加载
    await loadHighlightLibrary(); 

    // 初始化高亮
    highlight.highlightElement(codeRef.value);
});

3. 输入容错与反馈

UI通过 inputError 状态即时展示解析错误位置,配合红色警告框,提升调试效率。

try {
   
    const res = formatJson(input);
    jsonOutput.value = res;
    inputError.value = '';
} catch (e) {
   
    // 捕获 JSON.parse 的错误信息直接展示
    inputError.value = e.message; 
}
相关文章
|
4天前
|
安全 JavaScript 前端开发
时间戳转换器在线工具分享
Vue3开发的免费时间戳转换器,支持秒/毫秒级自动识别、多时区(中/日/美/欧等)、本地实时计算、中英文切换。可一键转换时间戳↔日期,显示相对时间、ISO格式等,全程离线运行,隐私安全。
180 2
|
6天前
|
传感器 人工智能 自然语言处理
2026 AI 元年:人工智能从工具属性迈向原生智能的历史拐点
2026 年之所以被定义为 AI 元年,并非因为某一款模型的参数规模突破,而是因为人工智能首次完成了从“工具系统”向“原生智能系统”的整体跃迁。
127 12
|
安全
阿里云服务器被xmrigMiner及pnscan及伪装httpd的病毒入侵排查记录
阿里云服务器被xmrigMiner及pnscan及伪装httpd的病毒入侵排查记录
1597 0
|
人工智能 数据可视化 Go
R绘图实战|GSEA富集分析图
GSEA(Gene Set EnrichmentAnalysis),即基因集富集分析,它的基本思想是使用预定义的基因,将基因按照在两类样本中的差异表达程度排序,然后检验预先设定的基因集合是否在这个排序表的顶端或者底端富集。
3299 0
R绘图实战|GSEA富集分析图
|
6天前
|
存储 人工智能 达摩院
深度实战:在 GPU 环境下一键部署 Jimeng 中文文生图交互系统
这是一篇专为中文文生图模型Jimeng(积木/积梦)打造的实战部署指南,详解环境配置、硬核修复huggingface_hub版本冲突,并提供健壮测试与交互式脚本,助你零踩坑运行东方美学AI绘图。
122 12
|
自然语言处理 Java API
音频的文本切换
音频的文本切换
314 0
|
JavaScript 安全 网络安全
Nuxt.js 速成(含使用宝塔实现nuxt项目部署)
Nuxt.js 速成(含使用宝塔实现nuxt项目部署)
1714 0
|
Java 关系型数据库 MySQL
【Java】已解决com.mysql.cj.jdbc.exceptions.CommunicationsException异常
【Java】已解决com.mysql.cj.jdbc.exceptions.CommunicationsException异常
2989 1
|
前端开发
若依修改,前端部署最初的样子,Ngnix部署最初的模样,配置域名/,就能够访问,最初的Ngnix的配置是怎样写的
若依修改,前端部署最初的样子,Ngnix部署最初的模样,配置域名/,就能够访问,最初的Ngnix的配置是怎样写的
|
NoSQL Java 关系型数据库
若依后端项目如何进行部署
若依后端项目如何进行部署