如何用 palworld-save-tools 三步搞定 Palworld 存档 JSON 双向转换【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools改一次 Palworld 存档,就得在十六进制编辑器里逐字节地猜?palworld-save-tools 能在 .sav 二进制存档(游戏进度文件)与 JSON 文本之间做完整的双向转换,角色、公会、基地、背包数据一条命令变成可读文本,改完再原样写回游戏。跑通最小闭环:三条命令拿到第一个 JSON 适用场景: 第一次接触工具,想立刻看到可见结果 操作难度: ⭐(简单)第 1 步:安装pip install palworld-save-tools✅ 成功标志:python -c import palworld_save_tools不报任何错误。如果你更想用源码版(便于跟进最新修复):git clone https://gitcode.com/gh_mirrors/pa/palworld-save-tools cd palworld-save-tools pip install .第 2 步:SAV 转 JSON# 输入 .sav 文件,输出默认是同目录下的 Level.sav.json palworld-save-tools Level.sav✅ 成功标志:控制台依次打印Decompressing sav file→Writing JSON to Level.sav.json,同目录出现 JSON 文件,用 VS Code 打开能看到CharacterSaveParameterMap、GroupSaveDataMap等结构化字段,而不是一片乱码字节。第 3 步:JSON 转回 SAV# 反向转换;--force 表示输出文件已存在时直接覆盖,不再询问 palworld-save-tools Level.sav.json --force✅ 成功标志:控制台最后打印Writing SAV file to Level.sav,新 .sav 文件落地。⚠️ 注意:Level.sav 转出的 JSON 可能非常大(几百 MB 起步),建议用 VS Code 或 JetBrains 系列这类能吃大文件的编辑器打开,别用记事本。原理简析:转换在背后做了什么先解压 .sav 外壳,取出内部的 GVAS 数据(Unreal 引擎的存档容器格式)。按 UE 存档的序列化规范逐字节读取(见 palworld_save_tools/archive.py 里的读写器)。遇到 Palworld 专属结构时,调用 palworld_save_tools/rawdata/ 下各模块的解码函数,把原本是不透明字节的 RawData 展开成可读字段(角色、公会、基地、工作分配等)。全部数据落成 JSON 输出;反向过程则用 JSON 重建二进制,再压缩写回 .sav。整个设计的核心目标是保真:SAV→JSON→SAV 应当逐字节一致(压缩前),这也是项目自带的回归测试反复验证的内容。场景一:把 Level.sav 转成可读的 JSON 适用场景: 想查看存档内容、备份或交给其他程序处理 操作难度: ⭐⭐(简单)需求一句话:存档是二进制,我需要一个能搜索、能 diff 的文本版本。# 默认输出 文件名.json,加 --minify-json 可去掉缩进、减小体积 palworld-save-tools Level.sav --minify-json预期输出:Converting Level.sav to JSON, saving to Level.sav.json Decompressing sav file Loading GVAS file Writing JSON to Level.sav.json✅ 成功标志:JSON 中worldSaveData下的数据都是带名称的键值结构,可以直接用编辑器全局搜索角色名或物品 ID。 提示:Windows 用户也可以下载 release 包,把 .sav 文件直接拖到包里的 convert.cmd 上,效果等同于上面的命令。场景二:改完 JSON 再写回 .sav 适用场景: 手动或脚本修改了 JSON 里的数值,要恢复成游戏能读的文件 操作难度: ⭐⭐(简单)需求一句话:编辑后的文本必须能被游戏识别,且不能丢数据。# 输入 .sav.json,输出默认是去掉 .json 后缀的 .sav palworld-save-tools Level.sav.json --output Level_new.sav预期输出:Converting Level.sav.json to SAV, saving to Level_new.sav,最后打印Writing SAV file to Level_new.sav。✅ 成功标志:Level_new.sav 生成,且文件头与原存档一致(可用场景四的自检命令确认)。⚠️ 注意:回写前先在副本上测试——改 JSON 时保持原有数据类型(数字别变字符串、别增删数组元素),替换正式存档前留好原始备份。场景三:只解码角色和公会数据 ⚡适用场景: 大存档全量解码太慢,而我只要其中一部分 操作难度: ⭐⭐(简单)需求一句话:全量解析耗内存,我只想拿角色和公会信息。# --custom-properties 接受逗号分隔的属性路径,只解码列出的部分 palworld-save-tools Level.sav --output chars.json \ --custom-properties .worldSaveData.CharacterSaveParameterMap.Value.RawData,.worldSaveData.GroupSaveDataMap预期输出:JSON 里只包含角色与公会两块数据,文件明显更小,转换速度更快。✅ 成功标志:chars.json 中能搜到角色属性字段,但没有基地、植被等无关结构。可选的完整路径清单定义在 palworld_save_tools/paltypes.py 里,按需取用。场景四:一键自检转换是否无损 适用场景: 改动或备份前后,需要确认存档没有被悄悄破坏 操作难度: ⭐⭐(简单)需求一句话:我不想手动比对,要一个转完再转回来还是一样的的判定。# 执行 sav JSON sav 全流程,并把结果与原始文件逐字节比对 python -m palworld_save_tools.commands.resave_test Level.sav预期输出:Testing if Level.sav is the same after resaving...,然后Comparing Level.sav and Level.sav.resave.sav...,最终打印:Files are the same!✅ 成功标志:看到Files are the same!且退出码为 0;若打印Files are different!则退出码为 1,说明转换环节有差异,需要排查工具版本与游戏版本是否匹配。选型对照表:比手工和通用工具强在哪 维度palworld-save-tools手工二进制编辑通用 UE 存档工具上手门槛pip 一条命令,零第三方依赖需掌握二进制序列化与游戏内存布局需理解 Unreal 工程与序列化细节数据完整性公会、角色、背包、基地、工作等已知结构几乎全覆盖,RawData 展开为可读字段只能盲改孤立字段只认通用结构,Palworld 专属字段表现为不透明字节转换保真SAV→JSON→SAV 逐字节一致(压缩前),且有回归测试兜底高概率破坏存档结构有损,部分元数据可能丢失扩展性可用 --custom-properties 裁剪解析范围,也可在 rawdata/ 下扩展解析器无有限故障速查表:报错时先查这里 现象根因处理办法提示python 不是内部或外部命令Python 未安装或未加入 PATH安装 Python 3.9 及以上版本;Windows 上可尝试py命令大存档转换卡死或内存不足Level.sav 解压后体积巨大,内存需求高关闭其他占内存程序;用--minify-json缩小产物;必要时用--custom-properties减少解析范围反复弹出Are you sure you want to continue?输出文件已存在,工具在询问是否覆盖加--force跳过确认输入 JSON 却没有生成 .sav工具按文件扩展名判断方向,扩展名与内容不符时会走错分支用--to-json或--from-json强制指定方向JSON 里玩家名/中文乱码编辑器按非 UTF-8 编码打开以 UTF-8 重新打开(工具默认按 UTF-8 写入 JSON)进阶组合拳:批量备份 无损校验脚本 ⚙适用场景: 多个存档需要定期备份,且要自动确认每份都无损 操作难度: ⭐⭐⭐(中等)把下面脚本保存为backup_convert.py,调用转换函数逐份处理,转回后与原始文件比对:# backup_convert.py 用法:python backup_convert.py 存档目录 import sys from pathlib import Path from palworld_save_tools.commands.convert import convert_sav_to_json, convert_json_to_sav from palworld_save_tools.palsav import decompress_sav_to_gvas for sav in sorted(Path(sys.argv[1]).glob(*.sav)): json_path sav.with_name(sav.name .json) convert_sav_to_json(str(sav), str(json_path), forceTrue, minifyTrue) back sav.with_name(sav.stem .roundtrip sav.suffix) convert_json_to_sav(str(json_path), str(back), forceTrue) ok decompress_sav_to_gvas(sav.read_bytes()) decompress_sav_to_gvas(back.read_bytes()) print(f{sav.name}: {✅ 无损 if ok else ⚠️ 有差异,请检查}) if not ok: sys.exit(1)python backup_convert.py saves/✅ 成功标志:每行都打印✅ 无损,进程以退出码 0 结束。 提示:脚本用 minify 模式生成 JSON,配合定时任务(Windows 任务计划或 cron)即可实现定期备份 自动体检;备份目录里保留的 JSON 还能直接做文本 diff,快速看出两次存档之间变了什么。FAQ为什么 JSON 文件比原 .sav 大很多?文本格式天然比二进制啰嗦:字段名、结构嵌套都要逐字写出。加 --minify-json 去掉缩进可以明显缩体积;如果目的只是备份,直接复制 .sav 原文件即可,JSON 主要用于查看和编辑。转回来的 .sav 和原来一模一样吗?项目的设计目标就是 SAV→JSON→SAV 逐字节一致(压缩前),并且用覆盖多个游戏版本存档的回归测试(tests/test_cli_scripts.py)持续验证。用场景四的 resave_test 对自己的存档跑一遍,打印 Files are the same! 即为无损。大存档内存不够,有没有省内存的玩法?用 --custom-properties 只解码你关心的数据结构(可选路径见 palworld_save_tools/paltypes.py),能显著减少解析量和内存占用;打开 JSON 时也请换用 VS Code 或 JetBrains 这类支持大文件的编辑器。Windows 上提示找不到 python,或 convert.cmd 没反应?常见原因是系统的应用执行别名劫持了 python 命令:到 设置 → 应用 → 应用执行别名 中关闭 python 相关别名,或改用 py 命令;也可以确认安装的是 Python 3.9 及以上版本。游戏更新后转换失败了怎么办?存档结构可能随版本调整。把工具更新到最新版本再试;集成到脚本或工具链时建议锁定版本号(例如 pip install palworld-save-toolsx.y.z),避免破坏性更新悄悄改变行为。能只解码一部分数据吗?能。--custom-properties 接受逗号分隔的属性路径,例如只保留角色与公会数据;默认是解码全部已知属性,想跳过不感兴趣的类型时就用它裁剪。行动清单用 pip 安装工具,完成第一次 SAV→JSON 转换对一份测试存档跑 resave_test,确认输出Files are the same!把批量备份脚本挂到定时任务,每次运行都自动体检给 .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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考