json - 如何合并 Aeson 对象?

标签 json haskell aeson to-json

我有一个像这样的 aeson 对象的列表

[object ["key1" .= "value1"], object ["key2" .= "value2"]] 

我想将它们合并为一个像这样的 aeson 对象

object ["key1" .= "value1", "key2" .= "value2"]

在使用其他语言的 JSON 数据(合并操作)时,这是相当标准的,但我在 Aeson 库中没有看到任何类似的内容。

我只是错过了一些东西吗?这可以通过一些标准的 haskell 函数来完成吗?我尝试使用 sequence 但似乎 JSON Value 不是一个 monad,所以我不能这样做。

我不需要处理深度合并或重复的键,我只想生成类似的东西

{
  "key1": value1,
  "key2": value2
}

来自

[{ "key1": value1 }, { "key2": value2 }]

最佳答案

鉴于列表仅包含 JSON 对象(因此具有键值对的元素或带有 Object constructor 的元素),您可以编写自己的:

import Data.Aeson(Value(Object))
import qualified Data.HashMap.Lazy as HML

merge_aeson :: [Value] -> Value
merge_aeson = Object . HML.unions . map (\(Object x) -> x)

如果我们使用给定的示例输入测试上述函数,我们将获得:

Prelude Data.Aeson HML> merge_aeson [object ["key1" .= "value1"], object ["key2" .= "value2"]] 
Object (fromList [("key2",String "value2"),("key1",String "value1")])

关于json - 如何合并 Aeson 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408359/

相关文章:

json - NPM 安装在计算机之间的行为不同

javascript - FlatList 在 React Native 中没有显示任何内容

haskell - 如果其中一个 monad 包装在 monad 转换器内,是否可以重用 monad 组合函数?

haskell - 带有 DataKinds 的 FromJSON 实例

haskell - Aeson 不解码带有 unicode 字符的字符串

android - 如何获取日期值并使用json android将其发送到服务器?

具有多个初始化方法的 Python 子类?

haskell - 为什么这个 TCP 服务器不工作?

exception - 如何使用 unsafeInterleaveIO 处理异常?

haskell - 如何处理不完整的 JSON/Record 类型(IE 缺少我稍后会填写的必填字段)?