批量格式化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.Replace 或 Copy 覆盖,支持 .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=900,Height=520,最小尺寸 MinWidth=800,MinHeight=450。
  • 启动直接居中:在 SourceInitialized 阶段按当前鼠标所在屏幕工作区 + DPI 缩放计算位置,避免先显示再移动的闪动。

列表与自动处理

  • 列表禁止重复:拖拽相同文件、多次拖拽或"上次列表"自动加载时,均会去重且不重复入队。
  • 自动处理:若 AutoProcessOnStartup=true 且 LastPaths 非空,启动后会自动处理;若展开 > 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.Json,System.Xml
  • 并发:SemaphoreSlim
  • 图标生成:独立 JsonXmlFormatter.IconGen 项目(SkiaSharp 自绘多分辨率 ICO)

变更要点(近期)

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

常见问题

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

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

相关推荐
光影6274 小时前
Unittest单元测试基础速记
测试工具·单元测试·json·测试覆盖率
ZLongTeng6 小时前
EIDE的launch.json文件
json
梦想不只是梦与想10 小时前
Python 中的 json 模块
python·json·对象转字符串
步行cgn13 小时前
JSON.stringify 详解:把 JavaScript 对象变成 JSON 字符串
开发语言·javascript·json
阿正的梦工坊14 小时前
深入理解 JSON-RPC 2.0:轻量级远程调用协议详解
rpc·json
腾讯数据架构师15 小时前
任务跑完怎么直接出图表?CubeStudio 任务可视化 ECharts 数据格式实操(CSV/JSON + metric.json,11 种图表一键渲染)
前端·json·echarts·数据可视化
救救孩子把15 小时前
结构化输出为何“格式正确、答案错误”?JSON Schema 的能力边界
android·java·json·agent·agent服务
霸道流氓气质17 小时前
智能表单生成器:结构化输出契约、JSON Schema 驱动渲染与 EAV/JSONB 混合存储的 Vue3 + Spring AI 生产级实战
人工智能·spring·json
SEO_juper17 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
SEO_juper18 小时前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站