Haskell 使用Aeson读取对象的单个字段,而不写入FromJSON实例

Haskell 使用Aeson读取对象的单个字段,而不写入FromJSON实例,haskell,aeson,Haskell,Aeson,如何使用Aeson从JSON对象中读取单个字段(按名称),而不写入任何类型类实例?您可以使用解码通过testring读取JSON作为可能值,因为值已经有一个来自JSON实例: *Q54233506 Q54233506> :set -XOverloadedStrings *Q54233506 Q54233506> decode "{ \"foo\": \"bar\", \"baz\": 42 }" :: Maybe Value Just (Object (fromList [("foo

如何使用Aeson从JSON对象中读取单个字段(按名称),而不写入任何类型类实例?

您可以使用
解码
通过testring读取JSON
作为
可能值
,因为
已经有一个
来自JSON
实例:

*Q54233506 Q54233506> :set -XOverloadedStrings
*Q54233506 Q54233506> decode "{ \"foo\": \"bar\", \"baz\": 42 }" :: Maybe Value
Just (Object (fromList [("foo",String "bar"),("baz",Number 42.0)]))
从这里,您可以使用中描述的技术之一从
值中提取数据

例如,您可以使用中的镜头提取
foo
baz
值:

*Q54233506 Q54233506> :set -XOverloadedStrings
*Q54233506 Q54233506> v = decode "{ \"foo\": \"bar\", \"baz\": 42 }" :: Maybe Value
*Q54233506 Q54233506> v >>= (^? key "foo")
Just (String "bar")
*Q54233506 Q54233506> v >>= (^? key "baz")
Just (Number 42.0)
您还可以使用
\u String
\u Number
来进一步编写此文件,以提取文本或数字:

*Q54233506 Q54233506> v >>= (^? key "foo") >>= (^? _String)
Just "bar"
*Q54233506 Q54233506> v >>= (^? key "baz") >>= (^? _Number)
Just 42.0
包包含允许对JSON进行解码/编码的组合器,而不需要FromJSON/ToJSON实例

这通常非常方便,例如,当解码依赖于其他信息(如HTTP头值)时

在您的情况下,您可以使用
key::Text->Decoder a->Decoder a
来 获取给定键的值


看看

你能提供一个你确切需要的例子吗?。据我所知,您可以使用
泛型
派生Aeson的类型类,因此不需要编写实例