gpt4 book ai didi

json - 和类型 toEncoding 的高效 Aeson 解析

转载 作者:行者123 更新时间:2023-12-01 23:36:59 31 4
gpt4 key购买 nike

我正在将第三方 JSON 结构解析为我自己的一组类型。我想以最有效的方式进行解析(我正在使用 Network.Socket 解析通过 unix 套接字发送的数据)

Aeson 的文档声称使用 toEncoding 进行解析的速度比 toJSON 快 3 倍,但是我不明白如何使用 toEncoding 为我的简单和类型编写有效实例。

例如:

data NodeLayout =
SplitHorizontalLayout
| SplitVerticalLayout
| StackedLayout
| TabbedLayout
| DockAreaLayout
| OutputLayout
deriving (Eq, Generic)

instance ToJSON NodeLayout where
toJSON = \case
SplitHorizontalLayout -> "splith"
SplitVerticalLayout -> "splitv"
StackedLayout -> "stacked"
TabbedLayout -> "tabbed"
DockAreaLayout -> "dockarea"
OutputLayout -> "output"

instance FromJSON NodeLayout where
parseJSON (String s) = pure $ case s of
"splith" -> SplitHorizontalLayout
"splitv" -> SplitVerticalLayout
"stacked" -> StackedLayout
"tabbed" -> TabbedLayout
"dockarea" -> DockAreaLayout
"output" -> OutputLayout
_ -> error "Received unrecognized NodeLayout"
parseJSON _ = error "Error parsing NodeLayout"

我有其他数据类型可以接收向量,但有时我会收到一个需要单独解析的值。如何使用 toEncoding 有效地将字符串解析为和类型?

最佳答案

据我所知,Aeson 不提供 fromJSON 的替代方案。用于解析/解码。文档解释说 toEncoding允许更有效的编码/序列化 - 从 Haskell 内存表示到有线格式。从你的问题中不清楚你需要哪个方向快速。

您可以提供明确的 toEncoding按照您的模式toJSON . Data.Aeson.Encoding提供了一堆辅助函数来编写这些:

    toEncoding = \case
SplitHorizontalLayout -> text "splith"
SplitVerticalLayout -> text "splitv"
StackedLayout -> text "stacked"
TabbedLayout -> text "tabbed"
DockAreaLayout -> text "dockarea"
OutputLayout -> text "output"

关于json - 和类型 toEncoding 的高效 Aeson 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009866/

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