首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误消息:尝试实现此类型的隐式写入或格式。

错误消息:尝试实现此类型的隐式写入或格式。
EN

Stack Overflow用户
提问于 2016-07-09 16:01:14
回答 1查看 1.9K关注 0票数 0

我有下面的json字符串。在scala中,我想提取一些字段并将它们保存在一个新的json中。

{“查询”:“doi:10.1186/s 13612-016-0045-3”,“结果”:{“总计”:“1”,“开始”:“1”,"pageLength":"10"},pageLength“url”:[{“格式”:“”,“平台”:“”,“值”:“http://dx.doi.org/10.1186/s13612-016-0045-3”},“标题”:“技术与反思:心情与记忆幸福机制”,“创造者”:{“创造者”:“康拉德,阿蒂”},{“创造者”:“塔克,西蒙”},{“创造者”:“克兰,约翰”},{“创作者”:“创作者”:“惠特克,史蒂夫”},“publicationName”:“幸福心理学”,"issn":"2211-1522",“开放存取”:“真”,“日记”:“13612”,“doi”:“10.1186/s 13612-016-0045-3”,“出版商”:“Springer”,"publicationDate":"2016-06-15",“卷”:“6”,“数字”:“1”,“问题类型”:“”,"topicalCollection":"","startingPage":"1",“版权”:“2016作者”,“体裁”:“OriginalPaper”,“抽象”:“AbstractBackgroundWe report a.}”,“面”:[{“名称”:“主体”、“价值”:{“价值”:“生物心理学”、“计数”}、{“价值”:“健康心理学”、“计数”:“1”}、{“价值”:“神经心理学”、“计数”、“1”}、{“价值”:“积极心理学”、“计数”、“1”}、{“价值”:“心理学”、“计数”:“1”}{“价值”:“生活质量研究”、“计数”、“1”}、{“名称”:“酒吧”、“价值观”:{“价值”:“幸福心理”、“计数”、“1”}、{“名称”:“年份”、“价值观”:{“价值”:“2016”、“计数”:“1”}}、{“名称”:“国家”、“价值观”:{“价值”:“美国”,“计数”:“1”},{“值”:“USA”,“计数”:“1”},{“名称”:“类型”,“值”:{“值”:“日记”,“计数”:“1”},{“名称”:“关键字”,“值”:{“值”:“情感”,“计数”:“1”},{“值”:“内存”,“计数”:“1”},{“值”},{“名称”:“关键字”,“值”:“情绪”“计数”:“1”},{“值”:“反射”,“计数”:“1”},{“值”:“联系”,“计数”:“1”},{“值”:“技术中介的反射”,“计数”:“1”},{“值”:“幸福”,“计数”:“1”}

特别是,我希望获得以下新的json对象(即提取字段"creators“、"publicationName”和“抽象”,并相应地将它们重命名为):

{“创作者”:{“创作者”:“Konrad,Artie"},{”创作者“:”Tucker,Simon"},{“创作者”:“Crane,John"},{”创建者“:”创建者“:”Whittaker,Steve"},“pubTitle”:“幸福心理学”,"pubAbstract":"AbstractBackgroundWe report .“}

这是我的当前代码,但我的错误信息是Error:(137, 27) No Json serializer found for type play.api.libs.json.JsResult[org.test.Publication]. Try to implement an implicit Writes or Format for this type. val json = Json.toJson(processedPubl)

代码语言:javascript
运行
复制
import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.data.validation.ValidationError
import play.api.libs.json.Reads._

case class Creator(creator: String)
case class Publication(pubTitle: String, creators: Seq[Creator], pubAbstract: String)

val jsonstring = ... // this is the raw string provided 
                     // at the beginning of this post

implicit val publReads: Reads[Publication] = (
        (JsPath \ "publicationName").read[String] and
        (JsPath \ "creators").read[Seq[Creator]] and
        (JsPath \ "abstract").read[String]
    ) (Publication.apply _)

val processedPubl = Json.parse(jsonstring).validate[Publication](publReads)

val json = Json.toJson(processedPubl)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-09 17:16:43

你应该试试这个:

代码语言:javascript
运行
复制
import play.api.libs.functional.syntax._
import play.api.libs.json._

case class Creator(creator: String)
case class Publication(pubTitle: String, creators: Seq[Creator], pubAbstract: String)

val jsonString = ...

implicit val creatorFormat = Json.format[Creator]
implicit val publWrites = Json.writes[Publication]
implicit val publReads: Reads[Publication] = (
  (JsPath \ "publicationName").read[String] and
  (JsPath \ "creators").read[Seq[Creator]] and
  (JsPath \ "abstract").read[String]
)(Publication.apply _)

val input = Json.parse(jsonString).as[Publication]
val output = Json.toJson(input)

Reads是在从JSON读取时使用的东西(input使用这个),Writes是在编写JSON时使用的东西(output使用它)。它们结合在一起形成了一种叫做Format的东西。由于在代码中使用case类,所以可以使用play方法自动生成这些读/写/格式。

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

https://stackoverflow.com/questions/38283664

复制
相关文章

相似问题

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