如何使用 Haskell Aeson 解析数组

2024-03-30

我有一个 JSON 文档,如下所示:

{ "series": [[1,2], [2,3], [3,4]] }

我想将其解析为一组数据类型:

data Series = Series [DataPoint]
data DataPoint = DataPoint Int Int  -- x and y

我在尝试编写时遇到很多问题FromJSONDataPoint 的实例。

instance FromJSON DataPoint where
  parseJSON (Array a) = ???

我尝试使用 Lens 来破坏 DataPoint 记录,但它无法编译:

case a ^.. values . _Integer of -}
  [x,y] -> DataPoint <$> x <*> y
  _     -> mzero

由于这个错误而失败(前两行我什至没有镜头欺骗,只是试图创建一个DataPoint <$> 1 <*> 2):

Couldn't match type ‘aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser
                       Integer’
              with ‘Integer’
Expected type: (aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser
                  Integer
                -> Const
                     (Data.Monoid.Endo
                        [aeson-0.7.0.6:Data.Aeson.Types.Internal.Parse
                     (aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser I
               -> Value
               -> Const
                    (Data.Monoid.Endo
                       [aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser
                    Value
  Actual type: (Integer
                -> Const
                     (Data.Monoid.Endo
                        [aeson-0.7.0.6:Data.Aeson.Types.Internal.Parse
                     Integer)
               -> Value
               -> Const
                    (Data.Monoid.Endo
                       [aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser
                    Value
In the second argument of ‘(.)’, namely ‘_Integer’
In the second argument of ‘(^..)’, namely ‘values . _Integer’

有一个更好的方法吗?

有人有将值数组解析为更详细结构的示例吗?


Aeson 有一个 list 的实例,所以我认为没有必要处理向量。

{-# LANGUAGE LambdaCase #-}
import Data.Aeson

data Series = Series [DataPoint]
data DataPoint = DataPoint Int Int

instance FromJSON DataPoint where
  parseJSON jsn = do
    [x,y] <- parseJSON jsn
    return $ DataPoint x y

instance FromJSON Series where
  parseJSON = \case
    Object o -> (o .: "series") >>= fmap Series . parseJSON
    x -> fail $ "unexpected json: " ++ show x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Haskell Aeson 解析数组 的相关文章

  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • C# Newtonsoft 反序列化 JSON 数组

    我正在尝试使用 Newtonsoft 反序列化数组 以便我可以在列表框中显示来自基于云的服务器的文件 但无论我尝试什么 我总是会收到此错误 Newtonsoft Json JsonReaderException 解析值时遇到意外字符 路径
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • Ruby on Rails 服务器在 HTTPS POST 请求期间崩溃

    我正在尝试与你沟通城市飞艇API http urbanairship com docs push html broadcast使用 ROR Web 应用程序 在我的控制器中 我有以下代码 require net http require n
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • 如何在 select 和 option 标签中添加 JSON 数据?

    我有这个html代码 div class searchfilter div class searchwrapper div div
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 将嵌套字典键值转换为 pyspark 数据帧

    我有一个 Pyspark 数据框 如下所示 我想提取 dic 列中的那些嵌套字典并将它们转换为 PySpark 数据帧 像这样 请让我知道如何实现这一目标 Thanks from pyspark sql import functions a
  • SQL Server OPENJSON读取嵌套json

    我有一些想要在 SQL Server 2016 中解析的 json 有一个项目 gt 结构 gt 属性的层次结构 我想编写一个解析整个层次结构的查询 但我不想通过索引号指定任何元素 即我不想做这样的事情 openjson json 0 or
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 在单行上获取 jq 的输出

    我使用以下输出 https stackoverflow com a 40330344 https stackoverflow com a 40330344 issues key status fields status name assig
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

  • 如何在 Docker 容器内运行 OpenCL + OpenGL?

    目的是在 Docker 容器内运行 OpenCL OpenGL 互操作 应用程序 但我还没有成功 Intro 我有配备 NVidia 显卡的笔记本电脑 因此我认为利用 NVidia Dockerfiles 1 2 将是一个很好的起点 以下
  • PCRE 中是否有“否定交替”或“否定字符串类”、“否定字符类”之类的东西?

    好吧 虽然模式 abc 匹配单个字符a b or c 模式 abc 匹配任何给定的字符isn t a b or c 现在如果我替换string for 特点在上面的声明中 如果我也将第一个模式更改为交替结构 那么它仍然适用 abc def
  • 在 jitpack 中获取“buildscript {} 块必须出现在任何插件 {} 块之前”错误

    我正在尝试使用 jitpack 发布我的 android 库 但得到buildscript blocks must appear before any plugins blocks error FAILURE Build failed wi
  • 我应该如何调整我的代码以实现 TBytes 和 TIdBytes 之间的兼容性?

    我遇到了与 中提到的相同的问题 Delphi XE4 Indy TBytes 和 TidBytes 之间的兼容性问题 https stackoverflow com questions 16339656 delphi xe4 indy co
  • 关闭连接后继续处理[重复]

    这个问题在这里已经有答案了 PHP 有没有办法关闭连接 本质上告诉浏览器没有更多数据 但继续处理 我想到的具体情况是 我想要提供缓存数据 那么如果缓存已过期 我仍然会提供缓存数据以获得快速响应 关闭连接 但继续处理以重新生成并缓存新数据数据
  • R-如何使用两种不同的调查设计进行双样本 t 检验

    我想对两个均值的相等性进行双样本 韦尔奇 t 检验 其中之一是使用简单随机抽样获得的 srsmean 另一个是使用调查包的调查权重计算得出的 mean weighted 我还进行了 t 检验mean weighted以及在调查设计中同时实施
  • Orion 的 Freeboard 数据源与 Context Broker 之间没有连接

    我一直在尝试连接 Freeboard 以可视化来自 OCB 的上下文信息 但是遇到了一些困难 导致我无法从那里接收任何数据 我的想法是 将Freeboard连接到OCB有问题 因为在OCB的订阅列表中没有任何新条目 并且Freeboard中
  • Visual Studio 2020 如何阻止选项卡中的文件名被缩短

    在 Visual Studio 对我来说是 2020 中 打开文件的文件名写在屏幕顶部的选项卡中 如果文件名太长 它会自动缩短 即代替真正的长文件名 cs它会说真的L lename cs 我想要显示整个文件名 我意识到我可以将鼠标悬停在选项
  • 使用退格控制字符擦除

    我正在尝试使用退格控制字符 b 删除行尾的尾随逗号 尽管它在没有其他输出的情况下有效stdout 如果之后有另一个输出 b 它变得毫无用处 这是一个例子 include
  • OpenCV2 薄板样条应用变换不起作用?

    我正在使用 Python OpenCV2 实现薄板变压器并遇到一些问题 当我执行 WarpImage 时 图像会正确扭曲 但是当我使用一些手动输入的点的estimateTransformation 时 这些点无法正确映射 相反 所有点最终都
  • Python 将列重塑为多列 - 交替行

    任何人都可以建议一种有效的方法 将一列 在 python pandas 数据框中 重塑为多列 并交替进行列分配 我可以用循环来做到这一点 但想知道是否有更优雅的方法 例如 请考虑以下示例 Added 有没有人有一个解决方案 可以将单列中的每
  • 如何比较两个日期?

    我有三个日期 1 上一个日期 2 当前日期 3 下一个日期 我想检查 currentDate 是否晚于前一个日期且早于 nextDate 我怎么做 NSDateFormatter df NSDateFormatter alloc init
  • Haskell 函数 :: [名称] -> [[(Name, Bool)]]

    鉴于以下情况 type Name String envs Name gt Name Bool 我必须实现 envs 以便给定名称列表 它返回名称和布尔值的所有可能组合 我的尝试没有返回所有可能的组合 这是我的代码 envs xxs x xs
  • 如何确保 Jest 在“unhandledRejection”上失败?

    我们的单元测试在持续交付管道的容器中运行 有时 我们不会在单元测试中处理拒绝 但是 我认为这是不正确的 并且在我看来管道应该失败 我怎样才能确保当我执行时jest并且在测试期间unhandledRejection事件发生 jest 会错误退
  • 提示工具包和提示工具包有什么区别

    我最近运行了一个 conda 列表 我发现我有两个不同的软件包 分别称为prompt toolkit 3 0 4 和prompt toolkit 3 0 4 我试图用谷歌搜索它们之间的区别 基本上使用我的问题标题的确切措辞 而出现的只是pr
  • 在javascript中获取鼠标光标的大小

    我需要确定网页上当前使用的鼠标光标的宽度和高度 我需要在光标正下方显示一个 div 也可能在其右侧 所以我需要确定 div 相对于确切指针位置的偏移量 这样光标就不会覆盖 div 该机制将用于Intranet系统 因此它可以是仅firefo
  • Terraform 中使用多个 user_data 文件

    我正在尝试为常见任务 例如文件夹创建和某些包安装 提供一个通用的 user data 文件 并为应用程序特定的配置提供一个单独的 user data 文件 我正在尝试以下 user data data template file userd
  • MacOS,如何删除键盘快捷键中未使用的服务项

    我是 Mac OS 的新手 正在学习 Automator 我发现它很有用 但不太可控 我在服务中创建了快捷方式 但不知道如何删除它 突出显示的项目是我要删除的项目 我想我应该用 Automator 来做 但我不知道如何做 任何帮助将不胜感激
  • javascript闭包立即评估[重复]

    这个问题在这里已经有答案了 考虑以下 JavaScript 代码 var a var f function for var i 0 i lt 3 i a push function alert i for var j 0 j lt 3 j
  • 如何使用 Haskell Aeson 解析数组

    我有一个 JSON 文档 如下所示 series 1 2 2 3 3 4 我想将其解析为一组数据类型 data Series Series DataPoint data DataPoint DataPoint Int Int x and y