问题标签 [circe]

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 回答
1135 浏览

json - Circe:解码具有不同可能内容类型的容器类型

我的目标是将 JSON 转换为以下模型:

  • 有一种容器类型,其结构看起来总是相同的。
  • 容器的content类型由看起来完全不同的类型表示(关于属性的数量和类型)。但是,所有内容类型在编译时都是已知的,并实现了密封特征。
  • 容器的typeId属性表示内容类型。例如,具有类型等的N均值的值。contentContentTypeN
  • JSON 结构看起来与您期望的完全一样,并直接映射到上面显示的 Scala 类型。
  • Container[A <: Content](顺便说一句:如果这是一个更优雅的解决方案,我愿意将容器类型更改为)。

用circe解码它的好方法是什么?我猜在这种情况下自动解码不起作用。

编辑:json结构的文档将内容字段描述为?mixed (object, integer, bool),因此它也可以是简单的IntBoolean代替案例类对象。但是现在可以忽略这两种类型(尽管有一个解决方案会很好)。

0 投票
1 回答
260 浏览

scala - 使用 scala meta 和 quasiquotes 定义隐式编码器

我正在尝试使用 Circe 创建一个隐式编码器。然而,这个编码器将使用注释创建,因此我使用的是 Scalameta。这是我的代码。但是,编译器抱怨在 quasiquotes 中有一个覆盖语句。

构建文件如下:

结果我仍然得到: 无法扩展宏注释(最常见的原因是您需要启用宏天堂插件;另一种可能性是您尝试在定义它的同一编译运行中使用宏注释)

0 投票
0 回答
163 浏览

scala - JSON 到案例类派生如何在 Scala 中工作?

例如,在 argonaut-shapeless 中。这是如何运作的?

我有兴趣将相同的原则应用于表示 Spark 作业的输入。例如给定

我希望废除写作的样板

0 投票
1 回答
390 浏览

json - 在 Circe 中执行“至少应存在两个字段中的一个”规则

我正在编写一个 Circe 解析器,其中架构要求至少设置两个字段之一。这是非常具体的,它似乎不是一种使用 Circe API 轻松完成的方法。

让我们调用我们的字段texthtml.

我已经尝试创建一个类,让我们调用它Content,将它作为单个参数添加到通用模型中,如果它的字段(文本和 html)都为 None,则在构造函数中引发异常。问题是如何定义解码器,因为如果我做这样的事情

无论如何,它都要求两个字段都存在。

我想要的是有一个解码器,如果该字段丢失,则将 None 传递给,Content.apply但我认为这不是预期的行为。

否则应该有一个完全不同的解决方案,但我想不出一个。

谢谢

0 投票
2 回答
419 浏览

java - 在 Circe 中处理具有不同数据类型的 json

就我而言,相同的 json 字段可能有不同的数据类型。例子:

或者

如何处理此案?我知道它可以由parse自定义编码器处理或使用,但这是一个非常复杂的 json 文本,有没有办法在不重写整个解码器的情况下解决这个问题(例如,只需“告诉”解码器将所有内容转换Int为现场) ?Stringneed_exp

0 投票
0 回答
305 浏览

scala - Scala 宏编译时间

处理一个使用 circe、enumeratum 和 shapeless 等库的 scala 项目

我们定义了一些枚举,即 Region;EntityType 和 EntityAction 例如

我们还有一个权限模型定义为

我们还有一个 UserEntityModel(以 json 格式保存在我们的数据存储中)和一个作为 http 响应的一部分返回的 UserModel

EntityKey 包含 Region 枚举,省略的字段是非枚举类型

如果没有来自 UserEntity 和 User 模型的权限和 revokedPermissions,clean compile时间不到 3 分钟。包含这些字段后,编译器会遇到

我们通过定义一个 .sbtopts 来解决它,并使用它的一些变体,因为它代表当前的 .sbtopts 是

玩弄 diff Xss 值以及指定 -mem ,似乎并没有造成太大的差异。

但是,包含这些字段后,clean compile平均时间现在几乎是 7 分钟(因为在一些地方使用了用户实体)

所有迹象都指向宏编译。我们正在使用自动推导。有没有办法保持样板免费并保持枚举的类型安全但减少编译时间。

当前版本是

在更新到最新版本的库和 scala 2.12.3 时,编译时间跳到近 20 分钟

尝试按照调试慢编译时间的一些步骤进行操作

据我所知,它是打字机阶段

0 投票
1 回答
267 浏览

scala - 具有隐式转换的类型类中的堆栈溢出

我做了一个泛型DynamoFormatScanamo它将任何具有Circe'sEncoderDecoder定义为 Json 字符串的对象放入数据库中。

然后我添加了一个隐式转换(到相同的object JsonDynamoFormat)来自动提供这些格式化程序。

当我导入它时,编译器会成功解析格式化程序,但是在运行时我得到一个堆栈溢出JsonDynamoFormat,其中调用jsonToFormatforType交替无限:

我真的不明白这里发生了什么。任何人都可以对此有所了解吗?

0 投票
1 回答
562 浏览

circe - 过滤对象数组以使用 circe 修改 json

我正在评估 Circe,但不知道如何使用数组过滤器来转换 JSON。我在其网站和 API 文档上阅读了该指南,但仍然没有任何线索。非常感谢帮助。

样本数据:

任务:

如何使用员工过滤器将 JSON 转换为另一个 JSON,例如所有年龄超过 50 岁的员工?

出于某种原因,如果您询问,我无法在生成 JSON 之前从数据源中过滤。

谢谢

0 投票
2 回答
664 浏览

json - 在Scala circe中按字段值将json列表解析为两种列表类型

我得到了(示例)json:

元素列表总是包含有 2 种可能性的对象:

  • 键入“ nodeX ”和属性:idab
  • 输入“ nodeY ”和属性:idc

我想获得给定类的两个列表:

我已经尝试过 circe(Scala 库)将此 json 解析为类:

但不幸的是,我得到了带有可选字段的对象元素列表。
目前我正在使用它作为解决方法:

我正在寻找更好的解决方案,更快的解决方案,因为此 json 中的列表包含不少于 70k 的元素。

提前致谢 :)

0 投票
1 回答
574 浏览

scala - Circe 从 JSON 中提取列表

我有以下失败(0 不等于 3),我不知道为什么。有什么想法吗?