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 缺失时不可用。
相关
- IPrinter - 接口
- JsonParser - 对应的输入实现
- XmlPrinter - 平行实现