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"와 속성을 포함 입력 "nodeY"및 특성 B 또는 객체 : ID 및 C.
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을 구문 분석 키르케 (스칼라 라이브러리)을 사용하고 있습니다. 나는 주어진 클래스의 두 목록을 얻을 필요가 : 지금 내가 사용하고 있으므로
case class NodeX(val id:Long, val a:Long, val b:Long)
case class NodeY(val id:Long, val c:List[String])
이이 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]
}
을 집단. 당신이 밀봉 특성과 ADT으로 NodeX
및 NodeY
클래스를 정의하는
를 사용 :
케이스 클래스를 정의 의존성 목록
에 라이브러리를 추가 ? 세미 오토 파생 디코더? – michaJlS
@michaJlS 나는'decode [MyJson] (json)'으로 해독한다. 나는 circe에 익숙하지 않다. 나는 semi-auto 파생 된 디코더에 대해서 읽었지 만, 사용법에 대해서는 전혀 모른다. – BoyFarmer
파싱 코드를 보여주고이 json에서 어디로 가져 가야하는지 말해야 할 것이다. – michaJlS