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
会在运行期而非加载期失败。
相关
- IParser - 接口
- XmlParser - 同一格式的 XML 版
- JsonPrinter - 反向实现