1
私が与えられました(例)JSON:ID、:解析の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"
]
}
]
}
要素のリストは、常に型のオブジェクト "nodeX" とプロパティが含まれていますbまたはタイプ「nodeY」およびプロパティ:idおよびcのオブジェクトです。
私はクラスにこのJSONを解析するためにキルケ(Scalaのライブラリ)を使用しています:
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私は、オプションのフィールドを持つオブジェクトの要素のリストを得ました。私は与えられたクラスの二つのリストを取得する必要があります。このJSON内のリストが70K未満決してが含まれているので、私はよりよい解決策、より高速な解決策を探しています
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]
}
:
case class NodeX(val id:Long, val a:Long, val b:Long)
case class NodeY(val id:Long, val c:List[String])
は今、私はこれを使用しています要素。事前に
感謝:)
それを使用します。
あなたのケースクラスを定義し、あなたの依存関係リスト
にライブラリを追加します。 ?半自動派生型デコーダ? – michaJlS
@michaJlS私は 'decode [MyJson](json)'でデコードしますが、私はcirceで経験はありません。私は半自動派生型デコーダについて読んでいますが、私は使用方法がわかりません – BoyFarmer
あなたは解析コードを表示し、このjsonからどこに行くのかを伝えなければなりません。 – michaJlS