问题标签 [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.
scala - 基于 JSON 结构解码 Argonaut 中的密封特征?
给定以下示例:
我需要编写一个CodecJson
用于Id
在对象具有适当结构时对其进行解码的方法。
添加某种鉴别器字段是对此的常见建议,但我不想更改我已经使用spray-json
and生成/使用的 JSON json4s
。
在这些库中,您的编码器/解码器基本上只是PartialFunction[JValue, A]
和PartialFunction[A, JValue]
. 如果您的值未在域中定义,则说明失败。我认为这是一个非常简单、优雅的解决方案。除此之外,您还拥有 JSON 类型的提取器,因此很容易匹配字段/结构上的对象。
Rapture 更进一步,使字段顺序不重要并忽略不匹配字段的存在,因此您可以执行以下操作:
这真的很简单/强大。
我无法弄清楚如何使用argonaut
. 这是迄今为止我想出的最好的:
所以有一些问题。我必须定义我不打算使用的额外编解码器。EncodeJson
我没有使用for中的案例类提取器CodecJson[Id]
,而是委托给我定义的其他编码器。只是对于只有 2 或 3 个字段的类来说,感觉不是很直接或干净。
该DecodeJson
部分的代码也很混乱。除了在. ifEmpty
_fold
DecodeJson.|||
有没有人有更惯用的方式来为 argonaut 中的 Sum 类型编写基本编解码器,不需要鉴别器,而是可以匹配json的结构?
scala - `circe` 类型级 Json => 一个函数?
使用circe
or argonaut
,我怎样才能写一个Json => A
(注意 -Json
可能不是类型的名称)A
由SSN
类给出的位置:
?
伪代码:
// assuming this function is named f
f(JsArray(JsNumber(1)))
不会成为一个,A
因为它的大小是 1,而
f(JsArray(JsNumber(1), ..., JsNumber(8)))
===SSN(SizedList(1,...,8))
json - 使用 Argonaut 或 Circe 从不完整的 JSON 更新案例类
给定一个不完整的 json(缺少某些字段),我需要从一个案例类实例(任何需要DecodeJson
的 s 隐式派生)创建一个更新的实例。如何使用 Argonaut(最好)或 Circe(如果我必须)来完成?
例子:
我很确定我必须将 json 解析为 json AST,然后将其转换为 Shapeless LabelledGeneric
,然后以某种方式使用 Shapeless update 来更新案例类实例。
编辑 2
在阅读了 Shapeless 源代码后,我发现我可以生成自己的“默认”对象。我设法创建了一个解决方案,该解决方案需要在解析 json 时存在案例类的实例。我希望避免这种情况,而是稍后提供实例。无论如何,它是:
这产生Person(Old Name Kept,42)
.
json - 如何使用 Argonaut 将具有超过 22 个字段的 Scala 案例类编码为 JSON?
我有一个案例类,其中包含超过 22 个字段。假设它看起来像这样(Scala 伪代码):
目前我只能看到jencode
最多 22 个字段jencode22L
的功能,最大值也是如此。除了将其编码为 JSON 之外,我还想手动将字段名称映射到其他名称。例如,我想成为A1
,比方说,比方说。a1
A2
b2
你如何在 Argonaut 中做到这一点?
json - Argonaut:解码多态数组
我试图为其编写的 JSON 对象DecodeJson[T]
包含一个不同“类型”的数组(这意味着其元素的 JSON 结构是不同的)。唯一的共同特征是type
可用于区分类型的字段。所有其他领域都是不同的。例子:
使用 argonaut,是否可以将 JSON 数组映射到 Scala Seq[Element]
,其中Element
是 type 的合适案例类的超类型ElementA
,ElementB
等等?
我做了同样的事情,play-json
这很容易(基本上是Reads[Element]
评估该type
领域并相应地转发到更具体的Reads
)。但是,我找不到用 argonaut 执行此操作的方法。
编辑:示例
Scala 类型(我希望使用):
JSON实例(不在我的控制之下):
scala - 元帅 akka `HttpResponse` 作为 Argonaut `Json`
我正在尝试这样编组一个akka HttpResponse
:
如果我为此实例编写 Argonaut EncodeJson
,它可能如下所示:
我已经设法将标头编组为 json。唯一的问题是身体,即ResponseEntity
. 由于它是一个 akka 流,如果我使用.toStrict
.
谁能指导我如何编组它?
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。谢谢!
scala - 解码成功的历史?
鉴于:
我怎样才能decode
,即JSON => Person
光标的历史?通过历史,我的意思是,我想知道没有"foo" : "dunno"
被查看/遍历。
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。
scala - 检索遍历的 JSON 字段
鉴于:
如何foo
从CursorOp
in获取 JSON 密钥的名称,即res53
?
换句话说,给定一个HCursor
,我想知道List[String]
已经遍历了哪些字段,即 。