问题标签 [aeson]

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

json - 使用 Aeson 进行错误检查

此代码将递归 JSON 结构解析为我制作的 haskell 对象。我正在使用 Aeson 库。我遇到的问题是我希望能够轻松地进行错误检查,即使是递归调用。现在,每当发生错误时,我都会使用一个虚拟值 (ayyLmao)。但是,我想利用从 Parser monad 获得的错误检查。我该如何做到这一点并可能在此过程中清理我的代码?如有必要,我还可以发布一些示例 JSON。

编辑:我想指出我想摆脱“ayyLmao”(因此是愚蠢的名字),并以某种方式使用 Parser monad 的“mzero”来代替我的错误检查。

编辑:下面答案中的代码是正确的,但我想添加我修改后的解决方案。给出的解决方案假定“null”表示不再有回复,但由于某种原因,API 设计人员决定应该用空字符串表示。

0 投票
1 回答
129 浏览

haskell - Aeson 匹配二叉树

我很难尝试解析类似的结构

变成二叉树

但我什至似乎无法正确输入类型。这个问题有简单的解决方案吗?

我假设每个 JSON 数组正好包含两个元素,所以结果应该是

编辑:我尝试过的:

我尝试添加用于导入的新数据类型

0 投票
1 回答
288 浏览

json - 覆盖 Data.Aeson 仅处理我记录的一个字段的方式

我正在为大学课程制作 REST API:

我想允许deleted在序列化 JSON 结构中是可选的,但在我的应用程序中不允许。如果解析时未指定,我想设置deleted为。False

我可以为 编写一个手动实例FromJSON,但我不想为所有字段都写出来。我想声明如何处理已删除的内容,并让自动实例处理其他所有内容。

我该怎么做?

0 投票
1 回答
783 浏览

haskell - ToJSON 的自动派生 (Map NewtypeOfText v)

我有一个地图,其中的关键是一种新型文本。我想自动(尽可能)为这个 Map 派生ToJSONFromJSONaeson已经为 Map Text v 提供了 ToJSON 和 FromJSON 的实例。

我的详细代码有效:

我可以做更多类似以下的事情吗?

编辑

我试过(但仍然没有运气):

0 投票
1 回答
224 浏览

haskell - 让 Aeson 处理混合类型的列表

这有效:

这有效:

这是完全有效的 JSON,但我无法使其工作:

甚至:

我想说服最后一个给我:

但我无法看到将 Aeson 的手臂扭到看到它想将其视为数字作为字符串的东西。

更新:

我想这样会好一些。我仍然希望我能让 Aeson 将所有内容强制转换为字符串,但我想我可以使用它。

0 投票
1 回答
813 浏览

haskell - Aeson:具有默认值的泛型

今天我想解决下一个问题。

假设我们将 typeclassDataWithDefault定义为

我们将数据Example定义为

我知道 Aeson 使用泛型自动派生FromJSONToJSON实例,但我不知道如何让它派生FromJSON具有给定 json 中未表示的字段的默认值的实例。可以使用泛型吗?其实我没有问你最终的解决方案,但也许有一些线索?

更新

让我添加有关该问题的更多信息。

现在假设您需要更新Example数据,现在它定义为

所以你想更新DataWithDefault实例声明

而我想做的不是写

并想自动导出这样的实例定义。更重要的是,我想这样做不仅是为了Example,而是为了DataWithDefault a

更新 2

合并.:?.!=目的是从给定的 json 中获取尽可能多的字段,并将每个缺失的字段设置为其默认值。所以当我们通过

我希望我的新示例不是field1 = Hello; field2 = World; field3 = 12,而是field1 = space; field2 = ship; field3 = 12

0 投票
2 回答
1432 浏览

json - 用动态 JSON 字段建模类型的 Haskell 方式?

我是 Haskell 的新手,来自命令式编程背景。我希望能够以“Haskell 方式”将对象序列化为 JSON,但还不太确定如何做到这一点。

我已经阅读了 RealWorldHaskell 的第 5 章,其中谈到了一些关于 JSON 的内容,并与 Aeson 一起玩过。我还查看了一些用 Haskell 编写的 JSON API 库,例如:

这让我能够从对象创建非常基本的 JSON 字符串(也感谢这篇博文):

那将打印出:

现在的目标是,将另一个字段添加到User可以具有任意字段的实例中。Facebook Graph API 有一个名为 的字段data,它是一个 JSON 对象,具有您想要的任何属性。例如,您可能会向 Facebook 的 API 发出这样的请求(伪代码,不熟悉 Facebook API):

前两个字段 ,nameobject是 type String,而data字段是任意属性的映射。

问题是,在上述User模型上实现这一目标的“Haskell 方式”是什么?

我可以理解如何做简单的案例:

但这并不是我想要的。这意味着User当序列化为 JSON 时,该类型将始终如下所示:

问题是,你是如何做到的,所以你只需要定义User一次该类型,然后可以将任意字段附加到该data属性,同时仍然受益于静态类型(或任何接近该类型的东西,对细节不太熟悉类型呢)。

0 投票
1 回答
815 浏览

haskell - 如何在 Haskell 中将参数化类型序列化为 JSON?

假设您有一个简单的类型,并希望使用 Aeson 将其序列化为 JSON。这是基本设置:

现在假设除了birdandstate字段之外,您还希望允许用户传入额外/自定义元数据。对于观鸟来说,也许这是气温、鸟类的密度、潮汐的位置……可能是任何东西,我们事先不知道。

通过查看Haskell 中的 Twitter API之类的示例,您似乎希望将其结构如下:

据我目前的理解,这是一个参数化类型。现在的目标是创建一种从该对象创建一些 JSON 的简单方法。所以我们定义一个这样的函数:

但我还不确定从这里去哪里。当我这样调用该函数时:

它引发了一个错误(我是 Haskell 的新手,所以我仍在学习如何解释所有这些东西的基础知识)

这里发生了什么/你如何让它发挥作用?

最终的目标是,不是在meta字段中传入一个字符串,而是一个类型化的对象(但它可以是任何对象),例如:

你如何在 Haskell 中实现这一点?

0 投票
2 回答
197 浏览

json - Haskell aeson包基本用法

通过 Haskell 工作,我正在尝试学习如何序列化到 JSON 或从 JSON 序列化。

我正在使用 aeson-0.8.0.2 并且我被困在基本解码上。这是我所拥有的:

文件游乐场/aeson.hs:

ghc --make playground/aeson.hs 产量:

[1 of 1] 编译主程序(playground/aeson.hs,playground/aeson.o)

游乐场/aeson.hs:13:35:不在范围内:`'

游乐场/aeson.hs:14:40:不在范围内:`<*>'

游乐场/aeson.hs:17:28:不在范围内:`mzero'

  1. 知道我做错了什么吗?
  2. 为什么这里需要 OverloadedString?
  3. 另外,我不知道<$>, <*>, ormzero应该是什么意思;我会很感激有关在哪里可以阅读有关这些内容的提示。
0 投票
3 回答
630 浏览

json - Aeson:解析枚举数据类型

如何声明以下数据类型的 FromJSON 实例:

以便遵循枚举数据类型的以下字符串:

这里暗示了一个可能的解决方案,但我无法编译该代码。

谢谢!