问题标签 [argonaut]

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

scala - 基于 JSON 结构解码 Argonaut 中的密封特征?

给定以下示例:

我需要编写一个CodecJson用于Id在对象具有适当结构时对其进行解码的方法。

添加某种鉴别器字段是对此的常见建议,但我不想更改我已经使用spray-jsonand生成/使用的 JSON json4s

在这些库中,您的编码器/解码器基本上只是PartialFunction[JValue, A]PartialFunction[A, JValue]. 如果您的值未在域中定义,则说明失败。我认为这是一个非常简单、优雅的解决方案。除此之外,您还拥有 JSON 类型的提取器,因此很容易匹配字段/结构上的对象。

Rapture 更进一步,使字段顺序不重要并忽略不匹配字段的存在,因此您可以执行以下操作:

这真的很简单/强大。

我无法弄清楚如何使用argonaut. 这是迄今为止我想出的最好的:

所以有一些问题。我必须定义我不打算使用的额外编解码器。EncodeJson我没有使用for中的案例类提取器CodecJson[Id],而是委托给我定义的其他编码器。只是对于只有 2 或 3 个字段的类来说,感觉不是很直接或干净。

DecodeJson部分的代码也很混乱。除了在. ifEmpty_foldDecodeJson.|||

有没有人有更惯用的方式来为 argonaut 中的 Sum 类型编写基本编解码器,不需要鉴别器,而是可以匹配json的结构?

0 投票
1 回答
356 浏览

scala - `circe` 类型级 Json => 一个函数?

使用circeor argonaut,我怎样才能写一个Json => A(注意 -Json可能不是类型的名称)ASSN类给出的位置:

?

伪代码:

// assuming this function is named f

f(JsArray(JsNumber(1)))不会成为一个,A因为它的大小是 1,而

f(JsArray(JsNumber(1), ..., JsNumber(8)))===SSN(SizedList(1,...,8))

0 投票
2 回答
1793 浏览

json - 使用 Argonaut 或 Circe 从不完整的 JSON 更新案例类

给定一个不完整的 json(缺少某些字段),我需要从一个案例类实例(任何需要DecodeJson的 s 隐式派生)创建一个更新的实例。如何使用 Argonaut(最好)或 Circe(如果我必须)来完成?

例子:

我很确定我必须将 json 解析为 json AST,然后将其转换为 Shapeless LabelledGeneric,然后以某种方式使用 Shapeless update 来更新案例类实例。


编辑 2

在阅读了 Shapeless 源代码后,我发现我可以生成自己的“默认”对象。我设法创建了一个解决方案,该解决方案需要在解析 json 时存在案例类的实例。我希望避免这种情况,而是稍后提供实例。无论如何,它是:

这产生Person(Old Name Kept,42).

0 投票
0 回答
376 浏览

json - 如何使用 Argonaut 将具有超过 22 个字段的 Scala 案例类编码为 JSON?

我有一个案例类,其中包含超过 22 个字段。假设它看起来像这样(Scala 伪代码):

目前我只能看到jencode最多 22 个字段jencode22L的功能,最大值也是如此。除了将其编码为 JSON 之外,我还想手动将字段名称映射到其他名称。例如,我想成为A1,比方说,比方说。a1A2b2

你如何在 Argonaut 中做到这一点?

0 投票
1 回答
397 浏览

json - Argonaut:解码多态数组

我试图为其编写的 JSON 对象DecodeJson[T]包含一个不同“类型”的数组(这意味着其元素的 JSON 结构是不同的)。唯一的共同特征是type可用于区分类型的字段。所有其他领域都是不同的。例子:

使用 argonaut,是否可以将 JSON 数组映射到 Scala Seq[Element],其中Element是 type 的合适案例类的超类型ElementAElementB 等等?

我做了同样的事情,play-json这很容易(基本上是Reads[Element]评估该type领域并相应地转发到更具体的Reads)。但是,我找不到用 argonaut 执行此操作的方法。


编辑:示例

Scala 类型(我希望使用):

JSON实例(不在我的控制之下):

0 投票
2 回答
425 浏览

scala - 元帅 akka `HttpResponse` 作为 Argonaut `Json`

我正在尝试这样编组一个akka HttpResponse

如果我为此实例编写 Argonaut EncodeJson,它可能如下所示:

我已经设法将标头编组为 json。唯一的问题是身体,即ResponseEntity. 由于它是一个 akka 流,如果我使用.toStrict.

谁能指导我如何编组它?

0 投票
1 回答
802 浏览

purescript - Purescript 为 Affjax Respondeable 重用 Argonaut JSON 解码

我正在尝试从 Haskell 服务器获取一些 JSON 数据,但是我遇到了 Respondeable 实例以及一般的 Affjax 的问题。我已经用 Data.Argonaut.Generic.Aeson (GA) 定义了 EncodeJson + DecodeJson,但我不知道如何将它与 Respondeable 实例和它的 fromResponse 函数相匹配。

它给了我错误“无法将外部类型与 Json 类型匹配”,但是否可以重用我的 decodeJson 实例而无需手动创建其他任何东西?也许通过创建一个 IsForeign 实例,但在其中使用 GA.decodeJson ?我只是不知道该怎么做。我已经看到它是如何在https://github.com/purescript/purescript-foreign/blob/master/examples/Complex.purs中手动完成的,但是我有复杂的类型需要与我的 Haskell JSON 输出相匹配,手动完成将是一个巨大的痛苦。

我正在使用 purescript 10.7、Affjax 3.02、argonaut 2.0.0 和 argonaut-generic-codecs 5.1.0。谢谢!

0 投票
2 回答
140 浏览

scala - 解码成功的历史?

鉴于:

我怎样才能decode,即JSON => Person光标的历史?通过历史,我的意思是,我想知道没有"foo" : "dunno"被查看/遍历。

0 投票
1 回答
118 浏览

scala - 在 Argonaut 中解析子文档

我正在尝试使用 Argonaut scala 库解析以下 Json:

Parse.parseWith(posts, .field ("took").flatMap( .string).getOrElse("42"), msg => msg) 可以很好地获取“took”字段。

现在,我想不出一种方法来访问像 hits->total 这样的嵌套值。另一个问题是,我如何按索引访问列表元素,例如 hits -> hits -> element 0 -> _index 以在我的情况下获取 logstash-2017.03.15。

0 投票
0 回答
113 浏览

scala - 检索遍历的 JSON 字段

鉴于:

如何fooCursorOpin获取 JSON 密钥的名称,即res53

换句话说,给定一个HCursor,我想知道List[String]已经遍历了哪些字段,即 。