首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用圆环透镜和单色透镜解析Json

用圆环透镜和单色透镜解析Json
EN

Stack Overflow用户
提问于 2016-12-04 03:02:45
回答 1查看 708关注 0票数 1

我已经编写了这个示例代码

代码语言:javascript
复制
package com.abhi
import io.circe._
import io.circe.optics.JsonPath._

object CirceTest extends App {
   val id = root.id.long
   val date = root.date.long

   val input =
      """
        |{
        |  "id" : 0,
        |  "childIds" : [
        |    11, 12, 13
        |  ],
        |  "date" : 1480815583505
        |}
      """.stripMargin
   parser.parse(input) match {
      case Left(a) => println(s"failed ${a}")
      case Right(json) =>
         val myId = id.getOption(json).get
         val myDate = date.getOption(json).get
         println(s"id: ${myId} date: ${myDate}")
   }
}

但这不会对事件进行编译

代码语言:javascript
复制
CirceTest.scala:26: constructor cannot be instantiated to expected type;
[error]  found   : scala.util.Right[A,B]
[error]  required: cats.data.Xor[io.circe.ParsingFailure,io.circe.Json]
[error]       case Right(json) =>
[error]            ^

我也试过

代码语言:javascript
复制
val jsonEither = parser.parse(input)
if (jsonEither.isRight) {
   val json = jsonEither.right.get
   val myId = id.getOption(json).get
   val myDate = date.getOption(json).get
   println(s"id: ${myId} date: ${myDate}")
}

但这也失败了

代码语言:javascript
复制
[error] CirceTest.scala:27: value right is not a member of cats.data.Xor[io.circe.ParsingFailure,io.circe.Json]
[error]       val json = jsonEither.right.get
[error]                             ^
[error] one error found

我很惊讶。当我可以做一个isRight,那么为什么编译器说我不能做一个right

这是我的build.sbt文件

代码语言:javascript
复制
name := "CirceTest"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
   "io.circe" %% "circe-core" % "0.5.1",
   "io.circe" %% "circe-generic" % "0.5.1",
   "io.circe" %% "circe-parser" % "0.5.1",
   "io.circe" %% "circe-optics" % "0.5.1"
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-04 03:36:01

Circe依赖于库,该库最近删除了cats.data.Xor,这是一种偏右的Either-like类型。Circe 0.5.0和更早版本使用cats.data.Xor作为解析和解码的结果类型,但是0.6.0+使用标准库的Either,因为Xor已经消失。

将circe依赖项更新为0.6.1将使您的代码按编写的方式工作。如果由于某种原因,您被困在早期版本的circe上,则需要调整代码以使用Xor。不过,我建议坚持最新版本-- circe和Cats都是年轻的项目,事情进展很快。如果您停留在早期版本,而且是因为一个依赖circe的库,请与吉特联系,我们将尝试与库维护人员一起进行更新。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40954909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档