gpt4 book ai didi

json - 如何用 aeson 解析嵌套的 JSON

转载 作者:行者123 更新时间:2023-12-03 22:24:13 25 4
gpt4 key购买 nike

我正在尝试使用 aeson 解析以下形式的 JSON

{"field":{"name":"..."}}

or

{"tag":{"name":"..."}}

or

{"line":{"number":"..."}}

构造以下数据类型
data Rule = Line Integer
| Field L.ByteString
| Tag L.ByteString

不幸的是,我面临两个我没有找到解决方案的问题,即:
  • 如何解析嵌套的 JSON?查看 (.:) 的执行情况,它使用查找来提取特定键的值。我对做这样的事情犹豫不决,因为它似乎过于依赖 aeson 如何实现事物的细节。我认为这是一个问题是错误的吗?
  • 如何根据 JSON 中存在的键使用正确的数据构造函数?我对 <|> 所做的所有努力都让我无处可去。

  • 我会发布到目前为止我编写的代码,但我什至还没有达到我有任何值得发布的地方。

    最佳答案

    下面的呢?

    {-# LANGUAGE OverloadedStrings #-}

    import Control.Applicative
    import Data.Aeson
    import Data.Aeson.Types
    import qualified Data.ByteString as B
    import qualified Data.ByteString.Lazy as L
    import qualified Data.Map as M

    data Rule = Line Integer
    | Field L.ByteString
    | Tag L.ByteString
    deriving Show

    instance FromJSON Rule where
    parseJSON j = do
    o <- parseJSON j -- takes care of JSON type check
    case M.toList (o :: Object) of
    [("field", Object o')] -> Field <$> o' .: "name"
    [("tag", Object o')] -> Tag <$> o' .: "name"
    [("line", Object o')] -> Line <$> o' .: "number"
    _ -> fail "Rule: unexpected format"

    关于json - 如何用 aeson 解析嵌套的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826678/

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