【发布时间】:2021-06-09 10:23:04
【问题描述】:
我有一个json,例如:
[
[
"Service ID",
"VARCHAR",
1,
12
],
[
"Operation",
"VARCHAR",
2,
12
],
[
"Start Date",
"VARCHAR",
3,
12
],
[
"End Date",
"VARCHAR",
4,
12
],
[
"Agent Position",
"VARCHAR",
5,
12
],
[
"Customer ID",
"VARCHAR",
6,
12
],
[
"Product",
"VARCHAR",
7,
12
],
[
"Service Type",
"VARCHAR",
8,
12
],
[
"Agent",
"VARCHAR",
9,
12
]
]
我想在哪里按摩/映射为案例类
{
"schema": [
{
"COLUMN_NAME":"Service ID",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":1,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Operation",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":2,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Start Date",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":3,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"End Date",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":4,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Agent Position",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":5,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Customer ID",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":6,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Product",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":7,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Service Type",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":8,
"JDBC_DATA_TYPE12":12
},
{
"COLUMN_NAME":"Agent",
"DATA_TYPE":"VARCHAR",
"ORDINAL_POSITION":9,
"JDBC_DATA_TYPE12":12
}
]
}
我已尝试遵循:Decoding structured JSON arrays with circe in Scala 作为建议,但 某些方法不再存在,例如 deleteGoRight 等。
我尝试过类似的方法:
implicit val decoder: Decoder[Schema] = { (hCursor: HCursor) =>
for {
colName <- hCursor.as[String]
colNameC = hCursor.delete
dtype <- colNameC.right.as[String]
dtypeC = colNameC.delete
pos <- dtypeC.right.as[Double]
posC = dtypeC.delete
jtype <- posC.right.as[Double]
} yield Schema(colName, dtype, pos, jtype) }
parser.decode[List[Schema]]("""["Service Type","VARCHAR",8,12]""") match {
case Right(applicants) => println(applicants)
case Left(ex) => println(s"Oops something is wrong with decoding value ${ex}")
}
但它无法解码,而且错误很难解释。
【问题讨论】:
-
我找到了一种方法,例如
implicit val decoder: Decoder[Schema] = { (hCursor: HCursor) => for { f <- hCursor.as[(String, String, Double, Double)] } yield Schema(f._1, f._2, f._3, f._4) } io.circe.parser.decode[List[Schema]](s"$json") match { case Right(schemas) => println(schemas) case Left(ex) => println(s"Oops something is wrong with decoding value ${ex}") }