批量格式化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 在发布目录存在(已经配置为总是复制)。

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

相关推荐
桑榆4161 天前
JSON 格式
json
fchen5211 天前
JSON:一站式开发者工具集,SQL日志解析并填充 、JSON格式化 与文本比对
sql·microsoft·json
小当家.1051 天前
LLM结构化输出与流式响应:从JSON修复到SSE全链路
llm·json
爱敲键盘的猴子1 天前
深入理解 Spring IoC -- 基于 XML 的 Bean 配置详解
xml·java·spring
前网易架构师-高司机2 天前
带标注的羽毛球运动员,裁判,羽毛球识别数据集,识别率84.4%,2879张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·羽毛球·裁判
leisoo80972 天前
股票数据本地化存储实战:JSON、数据库与列式存储的方案对比
jvm·数据库·json
切糕师学AI2 天前
从压缩到查询:PostgreSQL中JSON数据的存储与处理实践
数据库·postgresql·json
doubt。2 天前
大模型prompt工程Zero-Shot与Few-Shot以及json格式
人工智能·深度学习·机器学习·语言模型·json·prompt
烟锁池塘柳03 天前
Conda 创建环境报错:Unable to read repodata JSON file,清华源 pkgs/free 失效解决方法
json·conda
云水一下4 天前
零基础玩转bWAPP靶场(四十五):XSS - Reflected (JSON)
web安全·json·xss·bwapp·reflected