请考虑以下计划:
import Control.Monad.Trans.State.Strict
import Control.Lens
import Data.Aeson.Lens
import qualified Data.Aeson
json :: Data.Aeson.Value
json =
maybe undefined id (Data.Aeson.decode "{\"a\":\"1\"}")
addAField :: State Data.Aeson.Value ()
addAField =
assign (key "b" . _String) "2"
main =
print (execState addAField json)
它产生以下输出:
Object (fromList [("a",String "1")])
如何更新addAField
函数以使程序产生以下输出:
Object (fromList [("a",String "1"), ("b",String "2")])
答案 0 :(得分:2)
我能想到的最好的方法是直接寻址JSON值:
addAField :: State Data.Aeson.Value ()
addAField =
assign (_Object . at "b") (Just (Data.Aeson.String "2"))