【问题标题】:How to convert Json with attributes with dashes to object with fields with underscores?如何将带有破折号的属性的 Json 转换为带有下划线的字段的对象?
【发布时间】:2021-02-06 12:00:22
【问题描述】:

我有一个带有 json 属性的字符串,其中包含破折号。我想将其转换为带有下划线字段的对象。我尝试使用 Json4s 库但出现异常。

Exception in thread "main" org.json4s.package$MappingException: No usable value for some_field
Did not find value which can be converted into java.lang.String

您能帮我为带有破折号的字段编写一些自定义策略吗?

转换代码:

import org.json4s.native.JsonMethods.parse

object Converter extends App {

  case class Key(some_field: String, some_other_field: String)
  
  def jsonToObject[A](data: String)(implicit manifest: Manifest[A]): A = {
    import org.json4s.DefaultFormats
    implicit val formats = DefaultFormats
    parse(data).extract[A]
  }

  val input = "{\"some-field\":\"first\",\"some-other-field\":\"second\"}"

  val someObject = jsonToObject[Key](input)

  println(s"${someObject.some_field}  ${someObject.some_other_field}")
}

【问题讨论】:

标签: json scala json4s


【解决方案1】:

如果您不限于使用 json4s,那么您可以使用 jsoniter-scala 轻松完成:

  1. 添加依赖项:
libraryDependencies ++= Seq(
  "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-core"   % "2.6.2",
  "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "2.6.2" % "compile-internal" // or "provided", but it is required only in compile-time
)
  1. 派生编解码器并将其用于解析:
import com.github.plokhotnyuk.jsoniter_scala.macros._
import com.github.plokhotnyuk.jsoniter_scala.core._

object Converter extends App {
  case class Key(some_field: String, some_other_field: String)

  implicit val codec: JsonValueCodec[Key] =
    JsonCodecMaker.make(CodecMakerConfig.withFieldNameMapper(JsonCodecMaker.`enforce-kebab-case`))

  val input = "{\"some-field\":\"first\",\"some-other-field\":\"second\"}"
  val someObject = readFromString(input)
  println(s"${someObject.some_field}  ${someObject.some_other_field}")
}

【讨论】:

  • 感谢您的回复,我限制了依赖项。现在只有json4s。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2010-09-16
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多