问题标签 [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 投票
0 回答
1225 浏览

json - 创建一个 json 对象并向其添加新的键、值对

我有一个形式为 scala 的地图<String, Any>。我的目标是遍历地图的所有键并创建一个由所有这些k,v对组成的新 json 对象。我正在使用 json 库的播放框架。

我试过这个:

然而,Json.toJson 返回一个 JsonNode,而它需要一个 JsValue。我已经查看了这个SO Question来添加新项目。

问题一:如何将 JsonNode 转换为 JsValue

问题 2:这在 scala 中是一个糟糕的实现。我正在使用 var。如何转换相同的逻辑以便使用 val。我对函数式编程特别陌生,因此很难摆脱通常的迭代循环。

0 投票
1 回答
112 浏览

scala - 将验证约束与解组分离

我遇到过这篇文章,它演示了新的播放验证 API 与 shapeless 的结合。我无法重新创建代码片段(可能是因为我不知道从哪里导入)。

如何正确创建Get实例?正如文章所暗示的,这种方法与无形镜片有什么关系?

0 投票
1 回答
265 浏览

json - 播放 json 变形金刚地图可选字段

我有以下播放框架 2.3 json 转换器

所以这:

应该转变为:

我的问题是在源 json 模型中,line4 是可选的,所以我只想将它映射到 address.line4 可选。所以:

也应该转变为:

我不知道如何使用这些变压器来做到这一点,并且经过大量谷歌搜索后找不到类似的问题。

谢谢!网卡

0 投票
1 回答
971 浏览

json - Play-json:更新数组内的对象属性时出错

我正在使用 play-json 库来操作我的 json 文件。我已经关注了这个官方文档,一切正常,但他们没有告诉我们何时要更新数组中对象的值,所以我正在尝试我自己的示例。

IE

在上面的示例中,我试图更新“key123”的值,但一次又一次地收到此错误,只是无法找出我在哪里做错了:(

线程“主”java.util.NoSuchElementException 中的异常:play.api.libs.json.JsError.get (JsResult.scala:14) 处的 JsError.get(JsResult.scala:14) at play.api.libs.json.JsError.get(JsResult.scala :13) 在 Refactor.authPage(Refactor.scala:73) 在 Builder$.main(Builder.scala:36) 在 Builder.main(Builder.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun。 reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 com.intellij.rt .execution.application.AppMain.main(AppMain.java:140)

这是我的代码。任何形式的帮助将不胜感激。

0 投票
1 回答
240 浏览

json - 获取案例类的具体类型

我有这个:

稍后,我将这些块分组到 Seq 中,如下所示:

而且我想将每个块序列化为 Json(使用 Play)。我这样做如下:

“序列化块”的定义:

我有每个具体块(标题,正文......)的读者和作家,但是,正如你所看到的,当我在 Seq Scala 中混合这些块时,将其视为通用类型块,因此我正在做模式匹配每个可能的块类型(隐式转换?)。如果我只是在 Map Play 中调用“Json.toJson”,则会抱怨找不到“块”类型的读取器/写入器。

“块”是相对较大的 JSON 的片段。我正在获取 JSON,我将其拆分为合格的“块”,然后将其作为字符串保存在数据库中:

“大” JSON

我的问题是:有没有办法在不重复 n 次“块:类型”模式的情况下进行序列化?我的意思是:有没有办法获得该块的具体类型(知道 Seq 被键入为超类“块”而不是该块的“具体”类型)?

编辑

我为每个块都有一个读取器/写入器,如下所示:

编辑2:

Shapeless是解决这个问题的方法吗

编辑 3:

正如 Andrzej Jozwik 所说:“param1”和“param2”是我在这里用来定义我的 JSON 结构的“通配符”参数。每个块都有不同的参数。

0 投票
0 回答
109 浏览

playframework - 播放 json 转换器。JsObject 到 JsObject

我期待 JsObject 在请求正文中,我想提取和验证必填字段

请求正文:

我的阅读:

我的控制器:

这段代码有效,但它的样板代码太多......我的意思是我的阅读。我认为这段代码会起作用:

但它不编译。我认为有一个很好的解决方案

0 投票
1 回答
1246 浏览

json - 使用 play-json 转换 JsArray

json 转换器中的大多数示例都是关于 JsObject 的。我尝试转换 JsArray 但收到此错误

错误

0 投票
1 回答
319 浏览

json - Scalaz 验证的错误累积

我有一个复杂的 JSON,它保存在数据库中。它的复杂性被“隔离”在“块”中,如下所示:

整个 JSON:

在数据库中,每个块都被单独存储和处理:

持久块

每个块都有业务意义,因此,每个块都映射到一个案例类。我正在构建一个存储、更新和检索此 JSON 结构的 Play API,并且我想验证是否有人为了完整性而更改了它的数据。

我正在对每个块进行检索(解析和验证),如下所示:

案例类:

使用当前结构,如果某些字段被更改并且与它定义的类型不匹配,Play 会抛出此异常:

[NoSuchElementException:JsError.get]

因此,我想使用 Scalaz 和 Validation 构建一个累积错误结构,以捕获所有可能的解析和验证错误。我已经看到了这个这个,所以我以这种方式对验证进行了编码:

请注意,我使用的是应用函子<*>,因为Request有 20 个字段(使用该语法构建括号混乱),|@|应用函子仅适用于最多 12 个参数的案例类。

该代码适用于快乐路径,但是,当我修改某些字段时,Play 会引发稍后描述的执行异常。

问题:我想累积 Play 在解析每个块时可以检测到的所有可能的结构错误。我怎样才能做到这一点?

注意:如果在某种程度上Shapeless与此有关,我愿意使用它(我已经在使用它)。

0 投票
1 回答
864 浏览

scala - 使用 play-json 库对自定义 scala 对象进行 Scala 反序列化

我的 ScalaTest 在尝试将 JSON 字符串解析为自定义 Scala 对象时中断。我正在使用 Play-Json 库进行 [反] 序列化。序列化工作正常,但在 Blah 类上运行单元测试时反序列化中断。该测试调用 fromJsonString() 方法和 Im 使用 ScalaTest 库进行单元测试。在这里感谢一些帮助。

异常跟踪:(完整跟踪 - http://pasted.co/e627b1ee

Scala 对象定义:

我的 SBT 文件:

0 投票
1 回答
597 浏览

json - 使用 Play 2.3 和 Scala 2.11.1 将具有枚举属性的类转换为 Json 时出错

我有一个案例类UserEnum它的属性之一是

我想将此类转换为Json使用Play-Jsonapi 但我收到错误这里是我的用户类

用户状态

它在用户类中给了我以下错误

没有可用的 UserStatus 隐式格式

在这条线上

并在 UserStatus(enum) 中出现以下错误

未找到 unapply 函数

在这条线上

请帮我!