in s2core/src/main/scala/org/apache/s2graph/core/JSONParser.scala [33:82]
def innerValToJsValue(innerVal: InnerValLike, dataType: String): Option[JsValue] = {
try {
val dType = InnerVal.toInnerDataType(dataType)
val jsValue = dType match {
case InnerVal.STRING => JsString(innerVal.value.asInstanceOf[String])
case InnerVal.BOOLEAN => JsBoolean(innerVal.value.asInstanceOf[Boolean])
case InnerVal.BYTE | InnerVal.SHORT | InnerVal.INT | InnerVal.LONG | InnerVal.FLOAT | InnerVal.DOUBLE =>
// case t if InnerVal.NUMERICS.contains(t) =>
innerVal.value match {
case l: Long => JsNumber(l)
case i: Int => JsNumber(i)
case s: Short => JsNumber(s.toLong)
case b: Byte => JsNumber(b.toLong)
case f: Float => JsNumber(f.toDouble)
case d: Double =>
// JsNumber(d)
dType match {
case InnerVal.BYTE => JsNumber(d.toInt)
case InnerVal.SHORT => JsNumber(d.toInt)
case InnerVal.INT => JsNumber(d.toInt)
case InnerVal.LONG => JsNumber(d.toLong)
case InnerVal.FLOAT => JsNumber(d.toDouble)
case InnerVal.DOUBLE => JsNumber(d.toDouble)
case _ => throw new RuntimeException(s"$innerVal, $dType => $dataType")
}
case num: BigDecimal =>
// JsNumber(num)
// JsNumber(InnerVal.scaleNumber(num.asInstanceOf[BigDecimal], dType))
dType match {
case InnerVal.BYTE => JsNumber(num.toInt)
case InnerVal.SHORT => JsNumber(num.toInt)
case InnerVal.INT => JsNumber(num.toInt)
case InnerVal.LONG => JsNumber(num.toLong)
case InnerVal.FLOAT => JsNumber(num.toDouble)
case InnerVal.DOUBLE => JsNumber(num.toDouble)
case _ => throw new RuntimeException(s"$innerVal, $dType => $dataType")
}
// JsNumber(num.toLong)
case _ => throw new RuntimeException(s"$innerVal, Numeric Unknown => $dataType")
}
// JsNumber(InnerVal.scaleNumber(innerVal.asInstanceOf[BigDecimal], dType))
case _ => throw new RuntimeException(s"$innerVal, Unknown => $dataType")
}
Some(jsValue)
} catch {
case e: Exception =>
logger.info(s"JSONParser.innerValToJsValue: $e")
None
}
}