批量格式化XML与JSON文件小工具

JSON/XML 格式化工具 (WPF, .NET 8)

虽然网络上有很多在线的格式化工具,但有时候依然不够方便,这是一款轻量级的 Windows 桌面工具,用于批量/拖拽格式化 XML 与 JSON 文件,支持目录递归、严格校验、编码保留、原子替换/回收站替换、并发处理,以及会话记忆与启动自动处理。

下面是格式化后的结果:

功能特性

  • 拖拽处理:支持拖拽文件或目录到主窗口,目录会递归展开。
  • 快速内容判定 :首个非空白字符为 < 视为 XML,{/[ 视为 JSON,其他跳过;可开启"强制尝试解析"。
  • 严格校验
    • XML:禁用 DTD/外部实体,防注入,合法性检测后再格式化。
    • JSON:严格标准 JSON(不允许注释、尾随逗号)。
  • 格式化与编码
    • XML 使用 XmlWriter,保留/推断编码与 XML 声明;统一 CRLF 行尾。
    • JSON 使用 Utf8JsonWriter,先 2 空格缩进,再根据设置转换为 4 空格或 Tab;统一 CRLF 行尾。
  • 文件替换策略(稳健)
    1. 首选:将原文件移入回收站(如失败则硬删除),再将临时文件重命名为原名。
    2. 回退:File.ReplaceCopy 覆盖,支持 .bak 备份。
  • 并发处理:默认 4 并发,可在设置中调整。
  • 体积/过滤:超过 100MB 的文件自动跳过。
  • 会话记忆
    • 记住拖拽的最近路径列表(LastPaths)。
    • 下次启动可自动加载并处理(可通过配置开关)。
  • 批量确认:展开后文件数超过 5 个时弹出确认对话框(支持本会话记忆)。
  • 应用图标:内置程序化自绘多分辨率 ICO,任务栏/标题栏显示一致。

使用方法

  1. 运行 publish/JsonXmlFormatter.exe(需要 .NET 8 Desktop Runtime)。
  2. 将文件或目录拖拽进窗口。
  3. 如展开后的文件总数 > 5,会弹出确认提示。
  4. 处理完成后,列表显示每个文件的"成功/跳过/失败"状态与说明。
  5. 可勾选"只看失败/跳过",或点击"清空列表"。
  6. 点击"设置"可修改缩进风格、并发数、是否备份 .bak、强制尝试解析、是否记住批量选择等。

配置文件(与 EXE 同名,同目录)

应用启动时会在 EXE 同目录生成或读取与 EXE 同名的 JSON 配置,例如:

json 复制代码
{
  "CenterOnStartup": true,
  "AutoProcessOnStartup": true,
  "LastPaths": [
    "C:\\path\\to\\folder",
    "C:\\path\\to\\file.json"
  ]
}
  • CenterOnStartup:启动时窗口居中(支持多显示器/多 DPI)。
  • AutoProcessOnStartup:启动后自动加载并处理 LastPaths
  • LastPaths:上一次拖拽的文件或目录列表(自动去重)。

注意:本配置不兼容早期版本的配置方式(已改为"与 EXE 同名的 JSON")。

窗口与居中策略

  • 初始尺寸:Width=900Height=520,最小尺寸 MinWidth=800MinHeight=450
  • 启动直接居中:在 SourceInitialized 阶段按当前鼠标所在屏幕工作区 + DPI 缩放计算位置,避免先显示再移动的闪动。

列表与自动处理

  • 列表禁止重复:拖拽相同文件、多次拖拽或"上次列表"自动加载时,均会去重且不重复入队。
  • 自动处理:若 AutoProcessOnStartup=trueLastPaths 非空,启动后会自动处理;若展开 > 5 仍会弹出确认。

注意事项

  • 若文件被"只读"保护或正被其他进程占用,可能导致覆盖失败;程序会尝试移除只读属性与多次重试。
  • 单文件发布模式下,应用在发布目录生成 JsonXmlFormatter.json 配置。不要放在系统受限路径下以免权限问题。
  • JSON/XML 解析严格,请确保文件内容合法。对于非标准 JSON(带注释/尾随逗号)会提示失败。
  • 拖拽目录时,超过 100MB 的文件会被跳过处理。

发布方式

  • 框架依赖的单文件(win-x64):dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true --self-contained false -o ./publish
  • 可执行文件位置:publish/JsonXmlFormatter.exe

技术栈

  • .NET 8.0 WPF(C#),System.Text.JsonSystem.Xml
  • 并发:SemaphoreSlim
  • 图标生成:独立 JsonXmlFormatter.IconGen 项目(SkiaSharp 自绘多分辨率 ICO)

变更要点(近期)

  • 配置迁移:改为"与 EXE 同名的 JSON",新增 CenterOnStartupAutoProcessOnStartupLastPaths
  • 启动居中:在 SourceInitialized 即时居中。
  • 替换策略:新增"回收站删除 + 重命名临时文件",并保留 Replace/Copy 作为回退方案。
  • 列表去重:防止重复入队与重复处理。

常见问题

  • 提示"无法访问文件/权限不足":
    • 可能是目标只读、被占用或杀毒软件拦截;请尝试关闭相关程序或将发布目录加入白名单。
    • 程序会自动重试和回退。若仍失败,请提供"说明"列的完整错误文本。
  • 图标/标题栏不显示:请确认 Assets/app.ico 在发布目录存在(已经配置为总是复制)。

如需新增功能(托盘、右键菜单、更多格式化选项、多语言等),或需要便携版/安装包,请提出需求。

相关推荐
牛马1116 小时前
ios swift处理json数据
ios·json·swift
Wpa.wk1 天前
性能测试工具 - JMeter工具组件介绍二
运维·经验分享·测试工具·jmeter·自动化·json
Watermelo6171 天前
探究TOON的价值边界:比JSON更优的大模型友好数据格式?
数据结构·人工智能·语言模型·自然语言处理·数据挖掘·数据分析·json
web守墓人1 天前
【前端】ikun-pptx编辑器前瞻问题五:pptx中的xml命名空间
xml·前端
ID_180079054731 天前
除了Python,还有哪些语言可以解析淘宝商品详情API返回的JSON数据?
开发语言·python·json
h7ml1 天前
企业微信回调模式解析:从XML到POJO的自定义JAXB编解码器设计
xml·java·企业微信
Full Stack Developme1 天前
达梦(DM8)对 JSON 与 XML 的使用教程
xml·数据库·json
全栈前端老曹2 天前
【包管理】npm init 项目名后底层发生了什么的完整逻辑
前端·javascript·npm·node.js·json·包管理·底层原理
黄金贼贼2 天前
2026最新java单元测试json校验器
java·单元测试·json
chilavert3182 天前
技术演进中的开发沉思-304计算机原理:XML
xml·计算机原理