- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在玩 Aeson 和镜头包(lens-aeson,从核心镜头包迁移而来),一直在努力让它们一起工作。
作为一个玩具示例,我有一个类型:
data Colour = Yellow | Green | Blue
instance FromJSON Colour where
parseJSON (String s) = return $ case s of
"blue" -> Blue
"green" -> Green
_ -> Yellow
parseJSON _ = mzero
{
"info": {
"colour": "yellow"
},
/* other props */
}
{ "item": { "colour": "yellow" } }
{ "random": {"item_colour": "yellow"} }
> "{ \"info\": { \"colour\": \"yellow\" } }" ^? key "info" . key "colour"
Just (String "yellow")
> "{ \"info\": { \"colour\": \"yellow\" } }" ^? key "info" . key "colour" . _String
Just "yellow"
Just Yellow
的方法。 . parseJSON 似乎很接近,因为它采用了正确的类型(里面的东西可能最少),但在那之后就分崩离析了。理想情况下,我可以执行以下操作之一:
> "{ \"info\": { \"colour\": \"yellow\" } }" ^? key "info" . key "colour" . _ParseJSON :: Maybe Colour
Just Yellow
> "{ \"info\": { \"colour\": \"yellow\" } }" ^? key "info" . key "colour" . _Colour
Just Yellow
> encode $ "{ \"info\": { \"colour\": \"yellow\" } }" ^? key "info" . key "colour"
"\"yellow\""
decode
就像我通常会取回我更复杂的类型一样,但解码不喜欢不正确的 JSON;未包装在数组或对象语法中的东西。此外,先解码然后编码似乎非常困惑且性能不佳。
最佳答案
您可以使用 _JSON
棱镜。你只需要写一个ToJSON
Colour
的实例:
instance ToJSON Colour where
toJSON Yellow = String "yellow"
toJSON Blue = String "blue"
toJSON Green = String "green"
parseColour :: String -> Maybe Colour
parseColour j = j ^? key "info" . key "colour" . _JSON
-- point-free: parseColor = preview $ key "info" . key "colour" . _JSON
-- In GHCi
λ: parseColour "{ \"info\": { \"colour\": \"yellow\" } }"
Just Yellow
关于Haskell:重用带有镜头、镜头-aeson 和嵌套 JSON 的 FromJSON 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25504231/
如果我有 JSON我尝试推导出 FromJSON实例自动使用 Generics ,我遇到了 id 的问题存在于 JSON 中的多个位置. 有没有办法让我只覆盖 id部分还是我必须编写整个实例才能更改这
如何声明以下数据类型的 FromJSON 实例: data Privacy = Everyone | AllFriends | FriendsOfFrien
我有这样的数据类型: data A = A T.Text deriving (Generic, Show) instance A.ToJSON A 如果我对它使用A.encode: A.encode
如果不是Nothing,我试图返回一个JSON数据表示,如果Nothing则返回一个空的JSON对象; 我知道我可以做到: encode () -- "[]" 但现在我想要一个空对象( "{}" )。
我有一个(有效)json 编码数组,其中数据丢失或格式错误。我希望 Aeson 将其转换为 Maybe [Maybe Point] 并具有 Nothing,其中数组元素不是有效的 Point。 imp
我需要解析一个具有字符串元素的对象,其中字符串本身是一个字符串化对象: { "a" : "apples", "bar" : "{\"b\":\"bananas\"}" } 我想将其解析为
我正在尝试解析 JSON 以生成具有多个构造函数的类型。挑战在于该类型以包含所需数据的键的名称进行编码。理论上,我可以使用一堆 .:? 调用,然后检查给定的键是否返回 Just 但我认为必须有更好的方
我有一个格式为的 JSON 请求 {"command":"get","params":{"something":"something else"}} 以及来自 Yesod book 的代码片段 {-#
我需要解析没有严格结构的 json API 响应: { response: { /* any object here */ } } 如何编写 parseResponse 来保留解析(或为其选择解析器
假设有一个像这样的 JSON: { "bob_id" : { "name": "bob", "age" : 20 }, "jack_id" : { "name":
函数 decode 和 decode' 来自 aeson 包装几乎相同。但是它们在文档中描述了细微的差异(在此处仅发布文档的有趣部分): -- This function parses immedia
例如,我有多个构造函数的数据类型 data AB = A { ab :: Text , a :: Text } | B { ab :: Text , b ::
我正在尝试使用 aeson 来解析 api 返回的 json。使用 wreq 从 api 端点获取响应。在此字符串上运行 eitherDecode 时,我得到: Left "Failed readin
我所说的“历史数据”只是指日期作为键,当天的值作为值。 例如,政府机构或大学的研究部门经常以这种格式编制有关地震、降雨、市场变动等的日期 { "Meta Data": {
我有一个复杂的嵌套 json,我正在尝试使用 Aeson 和 Attoparsec 将其解析为我的自定义类型。基于问题的信息:Haskell, Aeson & JSON parsing into cu
我想解析一个 JSON 对象并使用给定的 name 创建一个 JSONEvent和 args 我正在使用 Aeson,现在我坚持转换 "args":[{"a": "b"}]到 [(String, St
我想使用酸商店存储 aeson Values。我采用了最小的酸实现,并试图天真地将类型切换到值。这些是我对 derivedSafeCopy 的调用: $(deriveSafeCopy 0 'base
aeson似乎在解析 JSON 时采取了一种有点简单的方法:它将顶级 JSON 值(对象或数组)解析为自己的固定表示,然后提供帮助用户将该表示转换为自己的表示的工具。当 JSON 对象和数组很小时,这
假设我要实现 FromJSON对于数据类型。以下是完整的源代码: {-# LANGUAGE NamedFieldPuns , OverloadedStrings , TupleSect
我有以下问题,我有一个带有可选键的 JSON 格式,我需要从我的 haskell 代码生成。 让我们举个例子 {-# LANGUAGE DeriveGeneric #-} import GHC.Gen
我是一名优秀的程序员,十分优秀!