首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json对象映射

Json对象映射
EN

Stack Overflow用户
提问于 2018-03-28 13:46:55
回答 1查看 1K关注 0票数 2

你好,我想使用隐式读取将json对象转换为map。在下面的代码中,我遇到了一个StackOverflow错误,任何人都可以看到问题所在:

代码语言:javascript
复制
"pass": {
  "key-1": {
    "field1": "aaaa",
    "field2": "aaaa"
  },
  "key-2": {
    "field1": "aaaa",
    "field2": "aaaa"
  },
  "key-3": {
    "field1": "aaaa",
    "field2": "aaaa"
  }
}

case class Pass(field1: String, field2: String)

implicit val mapReads: Reads[Map[String, Pass]] = new Reads[Map[String, Pass]] {
  def reads(jv: JsValue): JsResult[Map[String, Pass]] =
    JsSuccess(jv.as[Map[String, Pass]].map{
      case (k, v) => k -> v.asInstanceOf[Pass]
    })
}

val passMap = (json \ "pass").validate[Map[String, Pass]]

下面是堆栈错误:

代码语言:javascript
复制
java.lang.StackOverflowError
  at play.api.libs.json.JsReadable$class.as(JsReadable.scala:23)
  at play.api.libs.json.JsObject.as(JsValue.scala:124)
  at com.MyHelper$$anon$1.reads(MyHelper.scala:51)
  at play.api.libs.json.Format$$anon$3.reads(Format.scala:65)
  at play.api.libs.json.JsValue$class.validate(JsValue.scala:17)
  at play.api.libs.json.JsObject.validate(JsValue.scala:124)
  at play.api.libs.json.JsReadable$class.as(JsReadable.scala:23)
  at play.api.libs.json.JsObject.as(JsValue.scala:124)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-28 14:39:58

也许您将更有可能创建一个MapPass类案例,并使用Json.format为您完成工作!

代码语言:javascript
复制
import play.api.libs.json._

val a: String = """{
  "pass": {
    "key-1": {
    "field1": "aaaa",
    "field2": "aaaa"
  },
    "key-2": {
    "field1": "aaaa",
    "field2": "aaaa"
  },
    "key-3": {
    "field1": "aaaa",
    "field2": "aaaa"
  }
  }
}"""

case class Pass(field1: String, field2: String)

case class MapPass(pass: Map[String, Pass])

implicit val passFormat: Format[Pass] = Json.format[Pass]
implicit val mapPassFormat: Format[MapPass] = Json.format[MapPass]

val json = Json.parse(a)
val mapPassJsResult = json.validate[MapPass]
val mapPass = mapPassJsResult.get
print(mapPass.pass.mkString("\n"))

对我来说是这样的:

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

https://stackoverflow.com/questions/49536293

复制
相关文章

相似问题

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