问题标签 [play-json]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1327 浏览

scala - 在 Scala 中,参考抽象超类中的子类

有没有办法让this超类中的关键字引用该类的子类?具体来说,我正在尝试执行以下操作(Json 指的是 Play 的 Json 库):

这给出了错误No Json serializer found for type A. Try to implement an implicit Writes or Format for this type.。所以它说它不能序列化 type 的对象A,这是有道理的。然而,目标是让thisinJson.toJson(this)引用子类(在本例中是B)。

有没有办法做到这一点?如果没有,有没有其他方法可以Json.toJson(...)在超类中实现该方法而不必在子类(以及所有其他子类A)中实现?

0 投票
1 回答
855 浏览

scala - Scala 中的通用 REST 客户端

我对 Scala 有点陌生,我正在尝试为我想使用的 RESTful api 编写一个通用客户端。我能够为我想实例化我的客户端的具体案例类提供具体的Reads[T]和特定的案例类,但是编译器希望找到任何类型的和,而不仅仅是我正在使用的类型。一些代码来说明(我省略了不相关的部分):Writes[T]Reads[T]Writes[T]

我的通用客户:

JsonSupprt 特性:

我只是实例化,RestModule[Account]("accounts",config)但我得到了错误

当 T 只能是 Account 类型时,为什么编译器认为它需要对类型 T 的写入?有没有办法解决这个问题?

0 投票
1 回答
136 浏览

json - Scala play-json - 不解析/反序列化为单个参数案例类

在 Scala 中,我想解析使用 Travis CI REST API 检索到的 JSON 响应。为此,我决定使用 play-json 库。除此之外,根据 REST API '模式',我定义了以下案例类:

实现本身应该是不言自明的,但如果需要任何进一步的描述,我会更新问题。

除此之外,我还为 play-json 库定义了以下读取:

代码确实编译,架构即案例类确实确认了 REST API 响应,但是,在验证响应时,我收到以下错误:

JsError(List((/builds(0)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(0)/pull_request_number,List(ValidationError(List(error. expected.jsstring),WrappedArray()))), (/builds(1)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(1)/pull_request_number, List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(2)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), ( /builds(2)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(3)/pull_request_title,List(ValidationError(List(error.expected.jsstring), WrappedArray()))), (/builds(3)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(4)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(4)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), ( /builds(5)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(5)/pull_request_number,List(ValidationError(List(error.expected.jsstring), WrappedArray()))), (/builds(6)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(7)/pull_request_title,List(ValidationError(List) (error.expected.jsstring),WrappedArray()))), (/builds(7)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(8) /pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(8)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(9)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(9)/pull_request_number,List( ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(10)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds (10)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(11)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray( )))), (/builds(12)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(12)/pull_request_number,List(ValidationError(List(error) .expected.jsstring),WrappedArray()))), (/builds(13)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))),(/builds(13)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(14)/pull_request_title,List(ValidationError(List(error.expected.jsstring) ,WrappedArray()))), (/builds(14)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(15)/pull_request_title,List(ValidationError( List(error.expected.jsstring),WrappedArray()))), (/builds(15)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(16) )/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(17)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()) )), (/builds(18)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(18)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(19)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), ( /builds(19)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(20)/pull_request_title,List(ValidationError(List(error.expected.jsstring), WrappedArray()))), (/builds(20)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(21)/pull_request_number,List(ValidationError(List) (error.expected.jsstring),WrappedArray()))), (/builds(22)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(22) /pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(23)/pull_request_title,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(23)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(24)/pull_request_title, List(ValidationError(List(error.expected.jsstring),WrappedArray()))), (/builds(24)/pull_request_number,List(ValidationError(List(error.expected.jsstring),WrappedArray())))))

关于问题可能是什么的任何线索?提前致谢!

0 投票
0 回答
539 浏览

json - 如何在 play-json scala 中使用未使用字段的 json 失败?

使用 scala play-json 库,如何拒绝包含未使用字段的 JsonObject?当我的 api 用户拼错一个字段或给出一个我会忽略的额外字段时,我想给出一个错误。在 java 版本中,我看到提到DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,但在 scala 版本中没有看到。

这是我想要的单元测试:

而这个 build.sbt

0 投票
1 回答
549 浏览

scala - play-json - 找不到参数 um 的隐式值

我知道这个问题已经被问过很多次了,但是他们都使用spray-json。我想使用 play-json。这可能是所提出的解决方案不能解决问题的原因。带有 的特征route在一个名为RestApi.scala的单独文件中。使用Http.bindAndHandle它的文件位于名为Main.scala的文件中。下面介绍了两个没有删除无关元素的文件。如果您想查看整个文件,请单击上面的链接。

RestApi.scala

Main.scala

我指出 RestApi.scala 错误消息中发生错误的行:

这是在Contact.scalaContact中定义的数据模型。

我希望这不是重复的,但我真的不这么认为。任何帮助深表感谢。

0 投票
2 回答
125 浏览

scala - Play Action Composition - 硬编码参数化解析器

我想创建一个自定义操作,它可以消除编写这样的操作的样板:

但是,我一直遇到类定义错误。这是我最成功的尝试:

但我收到以下错误:method composeAction overrides nothing.

如果我改成composeAction[A: Reads]composeAction[A]告诉我没有 A 类型的 Json 序列化器。

还有其他方法可以定义此自定义操作吗?

0 投票
2 回答
668 浏览

json - 为对象名称和值播放框架 JsReads

考虑以下 JSON:

有什么办法,使用 JSONreads将这个 JSON 转换为 Scala 案例类?即 aSeq[Years]或 a Map[String, String],其中a Year 包含年份和描述。

作为参考,这是read为“简单”JSON 结构定义的方式:

隐含的JsReads

0 投票
1 回答
220 浏览

play-json - 如何使用 Play JSON 对 JsArray 进行迭代,避免使用案例类?

这是我的用例:我需要访问 JSON 文档中的数组,然后对其进行迭代,以便将 JSON 海岸到海岸转换应用于每个对象并获取转换后的对象的集合。

我正在考虑这样的方法:

但是results是一种JsLookupResult类型,没有.map()方法。

我需要做什么?

0 投票
1 回答
878 浏览

scala - 播放 json、递归读取、npe

我有两个案例类:

第一的:

一个人可能有 0 个或一些同事

第二:

我做了测试:

但是该测试失败并出现错误:

我想这是一种课程依赖错误。CoWorker 使用 Person 的 jsonReads,而 Person 使用 CoWorker jsonReads。是否可以解决此问题并进行测试?

0 投票
1 回答
663 浏览

scala - 对于 Option[T] 类型,让 play-json 将空字符串读取为 None

我正在尝试使用 play-json 从 GitHub API 解析 json,并merge_commit_sha在 Pull Requests 上遇到了该字段的问题(顺便说一下,我知道该字段已被弃用,但不想在此解析问题中讨论这个问题!) . 不幸merge_commit_sha的是,在某些情况下,字段会以空字符串的形式返回:

这是在我的案例类中声明该字段的方式:

我有一个implicitFormat[ObjectId],它不能容忍空字符串,因为这不是Git 哈希ID 的有效值。我还使用了Read[PullRequest]我想继续使用的 play-json macro-generated ,而不是单独声明拉取请求中每个字段的读取。

由于我已将该字段声明为选项,因此我希望"merge_commit_sha": ""将其读取为 value None,但这不是当前发生的情况 - 存在一个字符串,因此Format[ObjectId]调用了 并返回一个JsFailure.

我尝试过的一件事是声明具有所需行为的隐式Format[Option[ObjectId]],但它似乎没有被宏生成的Read[PullRequest].