【发布时间】:2021-01-25 10:47:29
【问题描述】:
我想在scala中用jackson反序列化json
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
case class Metadata(@JsonProperty("hive_type_string") hive_type_string: String)
case class Field(@JsonProperty("name") name: String, @JsonProperty("type") typeField: String, @JsonProperty("nullable") nullable: Boolean, @JsonProperty("metadata") metadata: Metadata)
case class StructTable(@JsonProperty("type") typeField: String, @JsonProperty("fields") fields: Seq[Field])
val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
val struct = mapper.readValue[StructTable](json_struct)
json_struct:
{ “类型”:“结构”, “领域”:[ { “名称”:“代码角色”, “类型”:“字符串”, “可空”:真, “元数据”:{ "HIVE_TYPE_STRING":"字符串" } }, { "name":"libelle_role", “类型”:“字符串”, “可空”:真, “元数据”:{ "HIVE_TYPE_STRING":"字符串" } } ] }
这是错误:com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造StructTable的实例:像这样的非静态内部类只能通过使用默认的无参数构造函数进行实例化
有人可以帮我吗?
谢谢。
【问题讨论】:
-
您需要发布实际失败的代码,而不仅仅是 sn-ps,并尝试将其缩减为显示问题的最简单版本。
-
您真的需要使用基于运行时反射的 Java 库吗?取而代之的是,在编译时派生解码器的许多 Scala 库中的任何一个更安全、更快?
-
@Tim 是实际代码,错误与最后一行有关:val struct = mapper.readValue[StructTable](json_struct)
-
你有什么简单易用的东西@LuisMiguelMejíaSuárez 吗?
-
几个选项:circe、uJson、jsonitter-scala 等