다음과 같이 jsonString을 구문 분석 한 후 문제가 발생합니다.
{"AAAA": [3,4], "BBBB": [1,65]}
따라서 주어진 문자열을 다음과 같이 구문 분석합니다.
import org.json4s.jackson.JsonMethods._
val exampleMap = parse("{\"AAAA\": [3,4], \"BBBB\": [1,65] }").values.asInstanceOf[Map[String,List[Int]]]
exampleMap: Map[String,List[Int]] = Map(AAAA -> List(3, 4), BBBB -> List(1, 65))
지금까지는 좋지만 두 번째 수준 목록에 액세스하거나 반복하려고 할 때 다음 예외가 발생합니다.
val value = exampleMap("AAAA")(0)
java.lang.ClassCastException: scala.math.BigInt cannot be cast to java.lang.Integer
at scala.runtime.BoxesRunTime.unboxToInt(tests.sc0.tmp:102)
at my.domain.examples.A$A164$A$A164.value$lzycompute(tests.sc0.tmp:7)
at my.domain.examples.A$A164$A$A164.value(tests.sc0.tmp:7)
at #worksheet#.#worksheet#(tests.sc0.tmp:7)
내가 무엇을 놓치고 있습니까?
json4s의 AST 구조가 다음과 같기 때문이라고 생각합니다.
sealed abstract class JValue
case object JNothing extends JValue // 'zero' for JValue
case object JNull extends JValue
case class JString(s: String) extends JValue
case class JDouble(num: Double) extends JValue
case class JDecimal(num: BigDecimal) extends JValue
case class JInt(num: BigInt) extends JValue
case class JBool(value: Boolean) extends JValue
case class JObject(obj: List[JField]) extends JValue
case class JArray(arr: List[JValue]) extends JValue
type JField = (String, JValue)
보시다시피 JInt는 BigInt에 매핑되므로 정수를 BigInt로 가져 오는 것입니다. 그러면 BigInteger가 Integer의 하위 클래스가 아니기 때문에 자동화 된 캐스팅이 작동하지 않습니다.
String 및 List [Int]를 인수로 사용하여 케이스 클래스 맵에 추출기 를 사용해 보셨습니까 ?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다