问题标签 [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.
json - 使用 Aeson 进行错误检查
此代码将递归 JSON 结构解析为我制作的 haskell 对象。我正在使用 Aeson 库。我遇到的问题是我希望能够轻松地进行错误检查,即使是递归调用。现在,每当发生错误时,我都会使用一个虚拟值 (ayyLmao)。但是,我想利用从 Parser monad 获得的错误检查。我该如何做到这一点并可能在此过程中清理我的代码?如有必要,我还可以发布一些示例 JSON。
编辑:我想指出我想摆脱“ayyLmao”(因此是愚蠢的名字),并以某种方式使用 Parser monad 的“mzero”来代替我的错误检查。
编辑:下面答案中的代码是正确的,但我想添加我修改后的解决方案。给出的解决方案假定“null”表示不再有回复,但由于某种原因,API 设计人员决定应该用空字符串表示。
haskell - Aeson 匹配二叉树
我很难尝试解析类似的结构
变成二叉树
但我什至似乎无法正确输入类型。这个问题有简单的解决方案吗?
我假设每个 JSON 数组正好包含两个元素,所以结果应该是
编辑:我尝试过的:
我尝试添加用于导入的新数据类型
json - 覆盖 Data.Aeson 仅处理我记录的一个字段的方式
我正在为大学课程制作 REST API:
我想允许deleted
在序列化 JSON 结构中是可选的,但在我的应用程序中不允许。如果解析时未指定,我想设置deleted
为。False
我可以为 编写一个手动实例FromJSON
,但我不想为所有字段都写出来。我想声明如何处理已删除的内容,并让自动实例处理其他所有内容。
我该怎么做?
haskell - 让 Aeson 处理混合类型的列表
这有效:
这有效:
这是完全有效的 JSON,但我无法使其工作:
甚至:
我想说服最后一个给我:
但我无法看到将 Aeson 的手臂扭到看到它想将其视为数字作为字符串的东西。
更新:
我想这样会好一些。我仍然希望我能让 Aeson 将所有内容强制转换为字符串,但我想我可以使用它。
haskell - Aeson:具有默认值的泛型
今天我想解决下一个问题。
假设我们将 typeclassDataWithDefault
定义为
我们将数据Example
定义为
我知道 Aeson 使用泛型自动派生FromJSON
和ToJSON
实例,但我不知道如何让它派生FromJSON
具有给定 json 中未表示的字段的默认值的实例。可以使用泛型吗?其实我没有问你最终的解决方案,但也许有一些线索?
更新
让我添加有关该问题的更多信息。
现在假设您需要更新Example
数据,现在它定义为
所以你想更新DataWithDefault
实例声明
而我想做的不是写
并想自动导出这样的实例定义。更重要的是,我想这样做不仅是为了Example
,而是为了DataWithDefault a
。
更新 2
合并.:?
的.!=
目的是从给定的 json 中获取尽可能多的字段,并将每个缺失的字段设置为其默认值。所以当我们通过
我希望我的新示例不是field1 = Hello; field2 = World; field3 = 12
,而是field1 = space; field2 = ship; field3 = 12
。
json - 用动态 JSON 字段建模类型的 Haskell 方式?
我是 Haskell 的新手,来自命令式编程背景。我希望能够以“Haskell 方式”将对象序列化为 JSON,但还不太确定如何做到这一点。
我已经阅读了 RealWorldHaskell 的第 5 章,其中谈到了一些关于 JSON 的内容,并与 Aeson 一起玩过。我还查看了一些用 Haskell 编写的 JSON API 库,例如:
这让我能够从对象创建非常基本的 JSON 字符串(也感谢这篇博文):
那将打印出:
现在的目标是,将另一个字段添加到User
可以具有任意字段的实例中。Facebook Graph API 有一个名为 的字段data
,它是一个 JSON 对象,具有您想要的任何属性。例如,您可能会向 Facebook 的 API 发出这样的请求(伪代码,不熟悉 Facebook API):
前两个字段 ,name
和object
是 type String
,而data
字段是任意属性的映射。
问题是,在上述User
模型上实现这一目标的“Haskell 方式”是什么?
我可以理解如何做简单的案例:
但这并不是我想要的。这意味着User
当序列化为 JSON 时,该类型将始终如下所示:
问题是,你是如何做到的,所以你只需要定义User
一次该类型,然后可以将任意字段附加到该data
属性,同时仍然受益于静态类型(或任何接近该类型的东西,对细节不太熟悉类型呢)。
haskell - 如何在 Haskell 中将参数化类型序列化为 JSON?
假设您有一个简单的类型,并希望使用 Aeson 将其序列化为 JSON。这是基本设置:
现在假设除了bird
andstate
字段之外,您还希望允许用户传入额外/自定义元数据。对于观鸟来说,也许这是气温、鸟类的密度、潮汐的位置……可能是任何东西,我们事先不知道。
通过查看Haskell 中的 Twitter API之类的示例,您似乎希望将其结构如下:
据我目前的理解,这是一个参数化类型。现在的目标是创建一种从该对象创建一些 JSON 的简单方法。所以我们定义一个这样的函数:
但我还不确定从这里去哪里。当我这样调用该函数时:
它引发了一个错误(我是 Haskell 的新手,所以我仍在学习如何解释所有这些东西的基础知识)
这里发生了什么/你如何让它发挥作用?
最终的目标是,不是在meta
字段中传入一个字符串,而是一个类型化的对象(但它可以是任何对象),例如:
你如何在 Haskell 中实现这一点?
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'
- 知道我做错了什么吗?
- 为什么这里需要 OverloadedString?
- 另外,我不知道
<$>
,<*>
, ormzero
应该是什么意思;我会很感激有关在哪里可以阅读有关这些内容的提示。