我一直在关注wreq tutorial,也准备Snoyman's blog post来了解Data.Aeson.Lens
的工作原理,但是我在理解如何做非常基本的事情上遇到了麻烦。
例如,为什么这两个访问根据数组是顶级数组还是从Json字段悬挂而给出不同的结果?
#!/usr/bin/env stack
-- stack --resolver lts-12.22 script
{-# LANGUAGE OverloadedStrings #-}
import Control.Lens
import Data.Aeson.Lens
import qualified Data.ByteString as B
main :: IO ()
main = do
let bs = "{\"dummy\": [1,2,3]}" :: B.ByteString
print $ bs ^?! key "dummy" . values . _Number
let b2 = "[1,2,3]" :: B.ByteString
print $ b2 ^.. values . _Number
返回
1.0
[1.0,2.0,3.0]
在两种情况下获得相同结果的正确方法是什么?