haskell处理JSON(aeson)
aeson是haskell的一个库,其实我也不太懂,不过大概是这样的:
data Person =
Person { firstName :: String
, lastName :: String
, age :: Int
, likesPizza :: Bool
} deriving Show
instance FromJSON Person where
parseJSON (Object v) =
Person <$> v .: "firstName"
<*> v .: "lastName"
<*> v .: "age"
<*> v .: "likesPizza"
parseJSON _ = mzero instance ToJSON Person where
toJSON (Person firstName lastName age likesPizza) =
object [ "firstName" .= firstName
, "lastName" .= lastName
, "age" .= age
, "likesPizza" .= likesPizza
]
data Person =
Person { firstName :: String
, lastName :: String
, age :: Int
, likesPizza :: Bool
} deriving (Show , Generic) instance FromJSON Person
instance ToJSON Person
decode :: FromJSON a => ByteString -> Maybe a
encode :: ToJSON a => a -> ByteString
{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}
import Data.Aeson
import Control.Applicative
import Control.Monad
import qualified Data.ByteString.Lazy as B
import Network.HTTP.Conduit (simpleHttp)
import Network.Socket (withSocketsDo)
import Data.Map
import GHC.Generics
data Contest =
  Contest{
    id :: String ,
    oj :: String ,
    link :: String ,
    name :: String ,
    start_time :: String ,
    week :: String ,
    access :: String
  } deriving (Show , Generic)
instance FromJSON Contest
instance ToJSON Contest
jsonURL :: String
jsonURL = "http://contests.acmicpc.info/contests.json"
getJSON :: IO B.ByteString
getJSON = withSocketsDo $ simpleHttp jsonURL
main :: IO ()
main = do
  d <- (eitherDecode <$> getJSON) :: IO (Either String [Contest])
  case d of
    Left err -> putStrLn err
    Right ps -> print ps
haskell处理JSON(aeson)的更多相关文章
- Haskell语言学习笔记(66)Aeson
		Data.Aeson 安装 aeson $ cabal install aeson Installed aeson-1.2.3.0 Prelude> :m +Data.Aeson Prelude ... 
- Haskell Json数据处理
		json的基本类型为——string, numbers, Booleans以及null,定义json类型如下 -- file: Json.hs module Json where data JValu ... 
- ios项目里扒出来的json文件
		p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ... 
- JSON Editor 中文文档
		JSON Editor JSON Editor 根据定义的JSON Schema 生成了一个Html 表单来对JSON进行编辑.它完整支持JSON Schema 的版本3和版本4,并且它集成了一些流行 ... 
- .Net使用JsonSchema验证Json
		最近项目中遇到了这样的需求,需要对上传的Json进行验证,以确保Json数据的准确性.前后使用了两种方式来验证: (1)第一种方式的实现思想:根据Json数据的格式,严格定义相应的类结构,并在Syst ... 
- JSON Web Tokens(JWT)
		现在API越来越流行,如何安全保护这些API? JSON Web Tokens(JWT)能提供基于JSON格式的安全认证.它有以下特点: JWT是跨不同语言的,JWT可以在 .NET, Python, ... 
- 你所不知道的JSON.stringify
		译者按: 老司机们,你知道JSON.stringify还有第二个和第三个可选参数吗?它们是什么呢? 原文: What you didn’t know about JSON.Stringify 译者: ... 
- Haskell语言学习笔记(80)req
		req req 是一个好用,类型安全,可扩展,上层的HTTP客户端的库. $ cabal install req Installed req-1.1.0 Prelude> :m +Network ... 
- 你所不知道的JSON
		译者按: 老司机们,你知道JSON.stringify还有第二个和第三个可选参数吗?它们是什么呢? JSON已经逐渐替代XML被全世界的开发者广泛使用.本文深入讲解JavaScript中使用JSON. ... 
随机推荐
- jira安装说明
			阅读目录 1.1 jira说明 1.2 安装配置jira 1.3 web界面访问 1.4 创建第一个项目 1.5 参考文献 回到顶部 1.1 jira说明 JIRA是Atlassian公司出品的项目与 ... 
- Pandas库入门
			pandas库的series类型 
- TouTiao开源项目 分析笔记16 新闻评论
			1.要达到的效果 1.1.主要效果图 点击了标题栏的消息图标后,然后会跳转到评论详情的页面. 1.2.触发的点击事件 在新闻详情的片段中的菜单点击事件中 设置上方标题栏的消息标的监听事件 case R ... 
- css媒体类型
			all 用于所有的媒体设备. aural 用于语音和音频合成器. braille 用于盲人用点字法触觉回馈设备. embossed 用于分页的盲人用点字法打印机. handheld 用于小的手持的设备 ... 
- 【Lowest Common Ancestor of a Binary Tree】cpp
			题目: Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. Accor ... 
- node express 登录拦截器  request接口请求
			1.拦截器 拦截器可以根据需要 做权限拦截 登录只是权限的一种, 思路是req.session.user判断用户session是否存在,是否是需要拦截的地址, 如果是就跳转登录页,或其他页, 如果非需 ... 
- gradle构建
			https://blog.csdn.net/baidu_30809315/article/details/77865414 
- freemaker参考地址
			https://zhidao.baidu.com/question/1304215193023416939.html 
- 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录
			孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ... 
- TensorFlow dataset API 使用
			# TensorFlow dataset API 使用 由于本人感兴趣的是自然语言处理,所以下面有关dataset API 的使用偏向于变长数据的处理. 1. 从迭代器中引入数据 import num ... 
