如何合并 Aeson 对象?
How to merge Aeson objects?
我有一个像这样的 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")])
我有一个像这样的 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")])