1
我得到給定的(例如)JSON:解析JSON列表Scala中兩個列表,瑟茜
{
"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"
]
}
]
}
元素列表總是包含有類型的對象 「節點X」 和屬性:ID,一個和b或類型爲「nodeY」的物體和屬性:id和c。
我使用瑟茜(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])
但urfortunately我買了可選字段對象的元素列表。我需要給定類的兩個列表:
case class NodeX(val id:Long, val a:Long, val b:Long)
case class NodeY(val id:Long, val c:List[String])
所以現在我用這:
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元素。
感謝提前:)
你怎麼解碼?半自動派生解碼器? – michaJlS
@michaJlS我用'decode [MyJson](json)'解碼,我對circe沒有經驗。我讀過半自動派生解碼器,但我不知道如何使用 – BoyFarmer
你將不得不顯示你的解析代碼,並告訴你從這個JSON中取出的位置。 – michaJlS