JsonParser

Gson 解析

基本信息

属性 值
路径 com.github.lunatrius.ingameinfo.parser.json.JsonParser
行数 99
实现 IParser

与 XmlParser 的映射

JSON 用对象键代替 XML 元素名:

XML JSON
<lines at="topleft"> {"lines": {"at": "topleft", ...}}
<line> {"line": [...]}
<str>text</str> {"str": ["text"]}

load(:24-39)

用 Gson 读成 JsonObject。 ⚠️ 与 XmlParser 一样未关闭 InputStream。

parse(:41-57)

与 XmlParser 同构:遍历 <lines> 等价物、读 at、 调 getLines / getValues。

方法 行 行为
getLines(JsonElement) :59-70 取 line 数组
getValues(JsonArray) :72-97 逐元素转 Value

键名 → Value 实例

同样走 Value.fromString(key) → ValueRegistry 的 forName。 未知名返回 ValueInvalid。

⚠️ JSON 对象的键在语义上无序,但 Gson’s JsonObject 内部用 LinkedTreeMap 保持插入序,所以本类遍历 entrySet() 时顺序与书写顺序一致 —— 这是 Gson 的实现细节, 不是 JSON 规范保证的。若换用其他 JSON 库,行内 value 顺序可能改变。

Gson 依赖来源

Gson 由 cofh-lib 提供(dependencies.gradle 的 compileOnly('curse.maven:cofh-lib-220333:2388748')), 本 mod 不自带 Gson。cofh-lib 缺失时本解析器无法工作 (NoClassDefFoundError)。

⚠️ 但 InGameInfoCore.setConfigFile(:120-121) 只要扩展名是 .json 就无条件 new JsonParser() —— 不检查 cofh-lib 是否在。cofh-lib 缺失 + 配置文件为 .json 会在运行期而非加载期失败。

相关