gpt4 book ai didi

json - 在 Haskell 中解析/导出任意嵌套的 JSON 对象到映射

转载 作者:行者123 更新时间:2023-12-02 11:41:29 25 4
gpt4 key购买 nike

我需要能够将巨大的嵌套 JSON 结构解析为更具延展性的东西,最好是从字符串到字符串的映射。

我正在讨论的结构类型示例:

{ "foo" : "baz", "bar" : {"qux" : "quux", "baz" : {"abracadabra" : "alakazam", "abc" : "xyz" } } }

我想将上面的内容解析为:

fromList [("foo", "baz"), ("bar/qux", "quux"), ("bar/baz/abracadabra", "alakazam"), ("bar/baz/abc", "xyz")]

是否可以将其与 Aeson 相对成熟的解析器一起使用?我是否应该对 Aeson 解析的 JSON AST 进行一些修改,直到它起作用为止?

最佳答案

我在这里无法自拔,我不得不滥用镜头...

在下面的示例中,Primitive 只是叶 JSON 值的一种数据类型。

import Data.Aeson
import Control.Lens
import Data.Aeson.Lens

flatten :: Value -> [(String, Primitive)]
flatten (Object obj) = do
(k, v) <- obj^@..ifolded
flatten v <&> _1 <>~ (k^..each ++ "/")
flatten (Array arr) = arr^..each >>= flatten
flatten prim = [("", prim^?! _Primitive)]

input = "{ \"foo\" : \"baz\", \"bar\" : {\"qux\" : \"quux\", \"baz\" : {\"abracadabra\" : \"alakazam\", \"abc\" : \"xyz\" } } }"

main = do
print $ input^? _Value . to flatten
-- Just [("foo/",StringPrim "baz"),("abc/baz/bar/",StringPrim "xyz"),("abracadabra/baz/bar/",StringPrim "alakazam"),("qux/bar/",StringPrim "quux")]

关于json - 在 Haskell 中解析/导出任意嵌套的 JSON 对象到映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com