尝试使用Scala
ScalaJson通过JSON
automated mapping使用Play Framework
来学习case class
中的JSON- 解析,我收到了上述错误。
com.fasterxml.jackson.core.JsonParseException: Unexpected character (':' (code 58)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source:
"column" : {
"name" : "column_name"
}; line: 2, column: 11]
at com.fasterxml.jackson.core.JsonParser._constructError(scalaPlayJson.sc:1577)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(scalaPlayJson.sc:529)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(scalaPlayJson.sc:458)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(scalaPlayJson.sc:1620)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(scalaPlayJson.sc:685)
at play.api.libs.json.jackson.JsValueDeserializer.deserialize(scalaPlayJson.sc:175)
at play.api.libs.json.jackson.JsValueDeserializer.deserialize(scalaPlayJson.sc:124)
at play.api.libs.json.jackson.JsValueDeserializer.deserialize(scalaPlayJson.sc:119)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(scalaPlayJson.sc:3704)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(scalaPlayJson.sc:2001)
at play.api.libs.json.jackson.JacksonJson$.parseJsValue(scalaPlayJson.sc:231)
at play.api.libs.json.StaticBinding$.parseJsValue(scalaPlayJson.sc:12)
at play.api.libs.json.Json$.parse(scalaPlayJson.sc:167)
at #worksheet#.#worksheet#(scalaPlayJson.sc:50)
有问题的输入是最简单的 JSON
可以想到[file:column.json
]
{
"column": {
"name": "column_name"
}
}
我正在使用以下代码来解析给定的Json文件。
case class Column(
tableId: Option[Int] = None,
id: Option[Int] = None,
name: String,
shouldCopy: Option[Boolean] = None,
dataType: Option[String] = None,
defaultValue: Option[String] = None
) {
def showColumnInfo: Unit = println(s"Name = $name")
}
object Column {
implicit val reads = Json.reads[Column]
implicit val writes = Json.writes[Column]
implicit val format = Json.format[Column]
}
Json.parse(Source.fromFile(s"$path/column.json").mkString("")).
asOpt[Column].
getOrElse(Column(name = "Could not read")).
showColumnInfo
我尝试过的事情没有成功:
"column"
中的密钥"Column"
更改为JSON
(大写“C”以匹配case class
的名称)JSON
提供为String
,而不是从文件中读取我的问题是:
JsonParseException
错误代码的列表及其含义?框架版本:
Scala
v2.11.11 Play-Json
v2.6.6 [SBT
:"com.typesafe.play" %% "play-json" % "2.6.6"
] SBT
v1.0.3 答案 0 :(得分:1)
原来我的输入JSON
错误(它是有效 JSON
,但根据提供的case class
不正确。我把它包裹在一个额外的一对括号 {}
里面应该是
{
"name": "column_name"
}
对于以Play-JSON
开头的人,我建议他们使用JsValue.as[T]
代替JsValue.asOpt[T]
,因为后者不会报告任何错误和你会不停地敲打你的头(我浪费了5个多小时 :-(
)。 docs提前警告过:
虽然asOpt方法更安全,但任何错误信息都会丢失。