haskell – 使用包含保留关键字的字段名解析JSON

我试图用aeson解析下面的 JSON.
{
    "data": [
        {
            "id": "34","type": "link","story": "foo"
        },{
            "id": "35","story": "bar"
        }
    ]
}

既然有很多字段我想忽略,似乎是I should use GHC generics.但是如何编写使用Haskell关键字(如数据和类型)的数据类型定义?以下当然给出:输入`data’的解析错误

data Feed = Feed {data :: [Post]}
    deriving (Show,Generic)

data Post = Post {
        id :: String,type :: String,story :: String
    }
    deriving (Show,Generic)

解决方法

您可以编写自己的FromJSON和ToJSON实例,而不依赖于GHC.Generics.这也意味着您可以为数据表示和JSON表示使用不同的字段名称.

帖子示例:

{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Aeson
import qualified Data.ByteString.Lazy as LBS

data Post = Post {
        postId :: String,typ :: String,story :: String
  }
  deriving (Show)

instance FromJSON Post where
  parseJSON (Object x) = Post <$> x .: "id" <*> x.: "type" <*> x .: "story"
  parseJSON _ = fail "Expected an Object"

instance ToJSON Post where
  toJSON post = object 
    [ "id" .= postId post,"type" .= typ post,"story" .= story post
    ]

main :: IO ()
main = do
  print $(decode $Post "{\"type\": \"myType\",\"story\": \"Really interresting story\",\"id\" : \"SomeId\"}" :: Maybe Post)
  LBS.putStrLn $encode $Post "myId" "myType" "Some other story"

饲料可以做同样的事情.如果不必忽略字段,那么也可以使用来自Data.Aeson.TH的derivedJSON,它可以修改字段名称作为第一个参数.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)