SAV 转 JSON 怎么操作?palworld-save-tools 完整指南
2026/8/22 3:31:22 网站建设 项目流程

SAV 转 JSON 怎么操作?palworld-save-tools 完整指南

【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools

palworld-save-tools 能把 Palworld 的 .sav 二进制存档转成易读的 JSON(易读的数据格式),改完再原样转回 .sav。读完本文,你会装好环境、跑通第一次转换,并掌握部分解析、无损校验与批量备份等常用操作。

环境准备:装好 Python 和 palworld-save-tools

要求只有一条:Python 3.9 或更高版本。该工具不依赖任何第三方库,装完即用。

方式一,从 PyPI 安装并验证:

pip install palworld-save-tools palworld-save-tools --help

✅ 看到 "Converts Palworld save files to and from JSON" 的帮助输出即成功。

方式二,直接克隆源码使用(项目零依赖,无需再装):

git clone https://gitcode.com/gh_mirrors/pa/palworld-save-tools cd palworld-save-tools

✅ 目录里出现 palworld_save_tools/ 和 tests/ 即成功。源码方式后续统一用python -m palworld_save_tools.commands.convert调用。

第一次跑通:一个存档文件走完整流程

仓库的 tests/testdata/ 目录里放了多个真实样例存档,适合先拿来做实验。按下面 5 步走一遍,你就掌握了核心流程。

第 1 步,确认样例文件存在:

ls tests/testdata/Level.sav

✅ 输出 tests/testdata/Level.sav 即成功。

第 2 步,SAV 转 JSON,输出文件名默认在原文件名后追加 .json:

python -m palworld_save_tools.commands.convert tests/testdata/Level.sav

✅ 看到 "Writing JSON to tests/testdata/Level.sav.json",且该文件已生成。

第 3 步,用 VS Code 等现代编辑器打开 Level.sav.json,搜索 "CharacterSaveParameterMap",确认能看到角色数据结构。JSON 可能很大,别用记事本。

第 4 步,JSON 转回 SAV,用 --output 指定新文件名,避免覆盖原档:

python -m palworld_save_tools.commands.convert tests/testdata/Level.sav.json --output Level-rt.sav

✅ 看到 "Writing SAV file to Level-rt.sav" 即成功。

第 5 步,对比 Level-rt.sav 与原始 Level.sav 的解压后内容应完全一致,具体校验命令见下文场景二。

核心场景实战

把 Level.sav 转成 JSON 并只解析你要的数据

🎯 适用场景:只想看角色与公会信息,不想等整个大存档解析完 | ⏱️ 1 分钟,难度低

⚠️ 注意:Level.sav 全量转出的 JSON 会非常大,吃内存也吃编辑器,能少解析就少解析。

指定 --custom-properties 只解码指定路径的数据,其余部分跳过深度解析:

python -m palworld_save_tools.commands.convert Level.sav \ --output Level.json \ --custom-properties .worldSaveData.GroupSaveDataMap,.worldSaveData.CharacterSaveParameterMap.Value.RawData

✅ 看到 "Writing JSON to Level.json" 即成功,Level.json 里只有公会与角色相关数据。

原理一句话:--custom-properties 按路径选择要启用的解码函数,路径清单定义在 paltypes.py 的 PALWORLD_CUSTOM_PROPERTIES 中。

💡 提示:传 --custom-properties all 表示全量解析(这是默认行为);只关心个别数据时,按需传子集能明显缩短转换时间。

改完 JSON 转回 SAV 并验证无损

🎯 适用场景:你修改了存档内容,写回游戏前想确认没有改坏 | ⏱️ 3 分钟

⚠️ 注意:写回游戏目录前务必备份原始 .sav,覆盖操作不可逆。

第 1 步,编辑 Level.json 中你关心的字段,保持原有数据类型不变。

第 2 步,转回 SAV:

python -m palworld_save_tools.commands.convert Level.json --output Level-new.sav

✅ 看到 "Writing SAV file to Level-new.sav" 即成功。

第 3 步,用项目自带的往返校验脚本确认转换链路无损:

python -m palworld_save_tools.commands.resave_test Level.sav

✅ 看到 "Files are the same!" 即成功,脚本会生成 .resave.json 和 .resave.sav 两个临时文件。

原理一句话:resave_test 执行 SAV→JSON→SAV 全流程,再逐字节比对两份存档解压后的内容,一致即无损。

💡 提示:每次游戏更新或大改存档前先跑一遍这个校验,出问题能立刻分清是工具还是你的修改导致的。

批量备份专用服务器存档

🎯 适用场景:专用服务器管理员定期备份多名玩家的存档 | ⏱️ 2 分钟

⚠️ 注意:跑批量脚本前,先把整个 SaveGames 目录复制一份,双保险。

mkdir -p backup/$(date +%Y%m%d) for f in /path/to/Pal/Saved/SaveGames/*/Level.sav; do id=$(basename $(dirname "$f")) python -m palworld_save_tools.commands.convert "$f" \ --output "backup/$(date +%Y%m%d)/${id}.sav.json" --minify-json --force done

✅ 循环结束无报错,且 backup 当天目录里出现若干 .sav.json 文件即成功。

💡 提示:--minify-json 去掉缩进和换行,减小体积、方便其他程序读取;--force 跳过覆盖确认提示,脚本才能无人值守跑完。

让 JSON 兼容严格解析器

🎯 适用场景:转出的 JSON 要交给第三方工具处理,NaN 值导致对方解析失败 | ⏱️ 1 分钟

部分浮点字段会存为 NaN,标准 JSON 规范不承认它,严格解析器会直接报错。加一个参数即可规避:

python -m palworld_save_tools.commands.convert Level.sav --convert-nan-to-null

✅ 看到 "Writing JSON to Level.sav.json" 即成功,输出中的 NaN 已变为 null。

⚠️ 注意:Inf/-Inf 同样会被转成 null,属于不可逆的信息丢失,只在下游工具确实读不了 NaN 时才用。

横向对比:palworld-save-tools 与通用存档工具怎么选

对比维度palworld-save-tools通用 Unreal 存档工具手动二进制编辑
SAV 与 JSON 双向转换支持多为只读单向不支持
基地、公会、角色等 Palworld 结构逐字段解析保留为原始字节需自行逆向
往返一致性逐字节比对校验不涉及难以保证
第三方依赖无,纯标准库各有依赖取决于工具
上手成本一条命令中等

如果你要查看或修改 Palworld 存档内容,选 palworld-save-tools;只是想快速看一眼存档大致结构,通用 Unreal 工具也够用。

进阶玩法

两个方向:把转换能力接进自己的代码,以及把往返校验做成批处理。

方向一,直接调用转换函数,跳过命令行:

from palworld_save_tools.commands.convert import ( convert_sav_to_json, convert_json_to_sav, ) # 存档转 JSON,只解析角色数据 convert_sav_to_json( "Level.sav", "Level.json", custom_properties_keys=[".worldSaveData.CharacterSaveParameterMap.Value.RawData"], ) # 修改 JSON(省略),再转回 SAV convert_json_to_sav("Level.json", "Level-new.sav")

✅ 运行后当前目录生成 Level.json 和 Level-new.sav 即成功。

方向二,批量校验多个存档的往返完整性,配合 cron 或 systemd 定时任务即可无人值守:

for f in /path/to/SaveGames/*/Level.sav; do python -m palworld_save_tools.commands.resave_test "$f" done

✅ 每个存档都输出 "Files are the same!" 即全部通过;出现 "Files are different!" 时优先检查对应版本是否跟上了游戏更新。

问题自检

Q:Palworld 的存档文件在哪里?Steam 版 Windows 在 %LOCALAPPDATA%\Pal\Saved\SaveGames\ \ \Level.sav;专用服务器在服务器端 Pal/Saved/SaveGames 目录下。没有存档可以先用仓库 tests/testdata/ 里的样例练手。
Q:报 "not a compressed Palworld save" 或 "unknown save type" 怎么办?先确认文件是完整的 .sav 而非残缺拷贝或改名的文件。若刚经历过游戏更新,先升级工具再重试:
pip install --upgrade palworld-save-tools

✅ 升级完成后重新执行转换。

Q:转回的 SAV 和原文件大小不一样,是不是坏了?SAV 是 zlib 压缩格式(一种压缩算法),压缩后大小会波动,不能只看体积。用往返校验判断:
python -m palworld_save_tools.commands.resave_test Level.sav

✅ 输出 "Files are the same!" 说明内容无损。

Q:提示 "already exists, this will overwrite the file" 卡住了?输出文件已存在,工具在等你手动确认。脚本或重跑场景加 --force 跳过提示,或用 --output 换个文件名:
python -m palworld_save_tools.commands.convert Level.sav --output Level-copy.json --force

✅ 看到 "Writing JSON to Level-copy.json" 即成功。

Q:怎么快速确认 JSON 里有没有我要的数据?在 VS Code 里打开 Level.sav.json 后直接搜索:CharacterSaveParameterMap 是角色,BaseCampSaveData 是基地,GroupSaveDataMap 是公会。搜不到说明该路径未启用解析,回到"只解析你要的数据"一节检查 --custom-properties。
Q:可解析的属性路径清单在哪里看?看源码 palworld_save_tools/paltypes.py 中的 PALWORLD_CUSTOM_PROPERTIES 字典,键就是全部可选路径。懒得挑时传 all 全量解析:
python -m palworld_save_tools.commands.convert Level.sav --custom-properties all

✅ 看到 "Writing JSON to Level.sav.json" 即成功。

收尾:照着这四步走

  1. 基础:背熟 SAV 转 JSON、JSON 转 SAV 两条命令,能独立完成一次往返。
  2. 应用:用 --custom-properties 按需求裁剪解析范围,写回游戏前跑一遍 resave_test。
  3. 自动化:把批量备份与批量校验放进定时任务,服务器存档自动归档。
  4. 进阶:在自己的项目里直接 import 转换函数,把它当存档处理库用。

版本提醒:palworld-save-tools 处于快速迭代期,游戏更新后存档结构可能变化,建议 pip 安装时锁定具体版本,需要新功能时再按需升级。

【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询