我有一个这样的 JSON:
{
"switch": "foo",
"items": [
{"type": "one"},
{"type": "two"}
]
}
我想将它加载到这样的类结构中:
case class MyFile(
@JsonProperty("switch") _switch: String,
@JsonProperty("items") _items: JList[Item],
) {
val items: List[Item] = _items.toList
}
case class Item(t: String)
object Item {
@JsonCreator
def create(@JsonProperty("type") _type: String): Item = {
Item(t) // <= conversion
}
}
诀窍是我想用某种取决于“switch”值的函数来转换传入的“type”字符串。最简单的例子是
def create(@JsonProperty("type") _type: String): Item = {
Item(t + "_" + switchValue)
}
但是,我似乎没有找到一种方法来在解析中(即在构造函数中或在@JsonCreator
静态方法中)访问 JSON 树的某些部分。
到目前为止,我唯一得到的基本上是一个全局变量,例如:
case class MyFile(
@JsonProperty("switch") _switch: String,
@JsonProperty("items") _items: JList[Item],
) {
MyFile.globalSwitch = _switch
val items: List[Item] = _items.toList
}
object MyFile {
var globalSwitch = ""
}
case class Item(t: String)
object Item {
@JsonCreator
def create(@JsonProperty("type") _type: String): Item = {
Item(t + "_" + MyFile.globalSwitch) // <= conversion
}
}
它有效,但显然相当难看:例如,您不能并行解析具有不同开关值的 2 个文件等。有更好的解决方案吗?例如,也许我可以访问某种 per-ObjectMapper 或 per-parsing 上下文,我可以在哪里存储此设置?