мне нужно разобрать следующий JSON строки:JsonProperty аннотации не работает Json разбор в Scala (Jackson/Jerkson)
{"type": 1}
Класс случая я использую выглядит следующим образом:
case class MyJsonObj(
val type: Int
)
Однако это путает Scala, поскольку «тип» - это ключевое слово. Итак, я попытался с помощью @JsonProperty аннотацию из Jacson/Jerkson следующим образом:
case class MyJsonObj(
@JsonProperty("type") val myType: Int
)
Однако анализатор Json до сих пор отказывается искать строку «типа» в формате JSON вместо «MyType». Следующий пример кода иллюстрирует проблему:
import com.codahale.jerkson.Json._
import org.codehaus.jackson.annotate._
case class MyJsonObj(
@JsonProperty("type") val myType: Int
)
object SimpleExample {
def main(args: Array[String]) {
val jsonLine = """{"type":1}"""
val JsonObj = parse[MyJsonObj](jsonLine)
}
Я получаю следующее сообщение об ошибке:
[error] (run-main-a) com.codahale.jerkson.ParsingException: Invalid JSON. Needed [myType], but found [type].
PS: Как видно выше, я использую jerkson/Джексону, но не возражали бы переключиться на какой-то другой формат JSON разбор библиотеки, если это облегчит жизнь.
Хотя это будет работать , Я действительно искал причину, по которой аннотация @JsonProperty не работала должным образом. Кроме того, я хочу, чтобы имя val было более значимым, чем просто «тип». – gjain
Это может быть проблемой, когда Scala делает все поля частными и автоматически генерирует методы получения и настройки. Возможно, вы сможете использовать мета-аннотации Scala (http://www.scala-lang.org/api/current/index.html#scala.annotation.meta.package). Что произойдет, если вы замените '@JsonProperty (" type ")' на '@ (JsonProperty (" type ") @field @getter @setter)'? – wingedsubmariner