我得到了(示例)json:
{
"version": 1.1,
"author": "XYZ",
"elements": [{
"type": "nodeX",
"id": 1,
"a": 1,
"b": 2
},
{
"type": "nodeX",
"id": 2,
"a": 1,
"b": 2
},
...
{
"type": "nodeX",
"id": 13214,
"a": 1,
"b": 2
},
{
"type": "nodeY",
"id": 1,
"c": [
"qaz",
"wsx"
]
},
{
"type": "nodeY",
"id": 2,
"c": [
"qaz",
"wsx"
]
},
...
{
"type": "nodeY",
"id": 3,
"c": [
"qaz",
"wsx"
]
}
]
}
元素列表总是包含有 2 种可能性的对象:
- 键入“ nodeX ”和属性:id、a和b。
- 输入“ nodeY ”和属性:id和c。
我想获得给定类的两个列表:
case class NodeX(val id:Long, val a:Long, val b:Long)
case class NodeY(val id:Long, val c:List[String])
我已经尝试过 circe(Scala 库)将此 json 解析为类:
case class Element(val 'type':String, val id:Long, val a:Option[Long],val b:Option[Long], val c:Option[List[String]])
case class MyJson(val version:Double, val author:String, val elements:List[Element])
但不幸的是,我得到了带有可选字段的对象元素列表。
目前我正在使用它作为解决方法:
val elements = // MyJson.elements
for (elem <- elements)
elem match {
case Element("nodeX", _,_,_,_) => //here convert to NodeX and add to list List[NodeX]
case Element("nodeY", _,_,_,_) => //here convert to NodeY and add to list List[NodeY]
}
我正在寻找更好的解决方案,更快的解决方案,因为此 json 中的列表包含不少于 70k 的元素。
提前致谢 :)