使用Circe在Json中解析自定义键



我已经写了这段代码

import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._, io.circe.generic.extras._
implicit val config: Configuration = Configuration.default
case class Company(name: String)
case class Quote(average: Double)
case class Stats(price: Double)
@ConfiguredJsonCodec case class Bulk(company: Company, @JsonKey("advanced-stats") stats: Stats, quote: Quote)
val input = """{"AAPL": {"company": {"name": "Apple"},"advanced-stats": {"price":10},"quote": {"average":10}}}"""
val parsed = decode[Map[String, Bulk]](input)

当我试图在amunite中执行这个时,我得到了一个错误

cmd5.sc:1: macro annotation could not be expanded (you cannot use a macro annotation in the same compilation run that defines it)
@ConfiguredJsonCodec case class Bulk(company: Company, @JsonKey("advanced-stats") stats: Stats, quote: Quote)

当我复制粘贴这段代码到一个文件并试图编译它时,它会给出编译错误

could not find Lazy implicit value of type io.circe.generic.extras.codec.ConfiguredAsObjectCodec

编辑::感谢下面的答案,代码开始在菊石上工作。当我将其复制粘贴到Scala文件中时,它仍然无法编译。我谷歌了一下,把代码改成了

object DefaultValues {
  implicit val useDefaultValues = Configuration.default.withDefaults
}
import DefaultValues._
@ConfiguredJsonCodec
case class Bulk(
    company: Company,
    @JsonKey("advanced-stats") stats: Stats,
    quote: Quote
)

但是仍然写着

could not find Lazy implicit value of type io.circe.generic.extras.codec.ConfiguredAsObjectCodec[Bulk]

是否启用了宏注释?Scala 2.13的require标志,你可以在氨石中启用:

interp.configureCompiler(_.settings.YmacroAnnotations.value = true)

在使用Scala 2.12及更早版本的aminite中必须使用

// replace with Scala version appropriate for your Ammonite
//                                             /
import $plugin.$ivy.`org.scalamacros:paradise_2.12.11:2.1.1`

最新更新