Haskell 使用Aeson读取对象的单个字段,而不写入FromJSON实例
如何使用Aeson从JSON对象中读取单个字段(按名称),而不写入任何类型类实例?您可以使用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
解码
通过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的类型类,因此不需要编写实例