JsonPrinter

写回 JSON

基本信息

属性 值
路径 com.github.lunatrius.ingameinfo.printer.json.JsonPrinter
行数 93
实现 IPrinter

与 XmlPrinter 的结构对应

XmlPrinter JsonPrinter 行
appendLines(Document, Element, format) appendLines(JsonObject, format) :43-56
appendLine(Document, Element, lines) appendLine(JsonArray, lines) :58-68
appendValues(Document, Element, values) appendValues(JsonArray, values) :70-91

方法名完全相同,参数从 DOM 换成 Gson 类型 —— 两份实现是刻意平行的,便于对照。

print(:21-41)

建 JsonObject 根 → appendLines → Gson 序列化写文件。

⚠️ 同样没有原子写(与 XmlPrinter 一致), 写到一半失败留下截断文件。

at 属性的存放位置

XML 用属性 <lines at="topleft">, JSON 必须放进值里({"lines": {"at": "topleft", ...}})。 JsonParser 读的正是这个位置。

与 XmlPrinter 共有的两个问题

遍历 HashMap 顺序不确定

format 在 InGameInfoCore 里是 HashMap (:50),appendLines 遍历它 —— 9 个对齐块的输出顺序 不保证与枚举声明序一致,且因 hash 顺序固定而「稳定但不是声明序」。

未注册 value 类无法往返

元素/键名取 Value.toString(value) → ValueRegistry 的 forClass(精确类匹配), 未注册类回落到 "invalid"。

依赖

与 JsonParser 共用 Gson, Gson 由 cofh-lib 提供(compileOnly)。cofh-lib 缺失时不可用。

相关