使用“镜头”向JSON对象添加新字段

时间:2016-06-16 13:03:27

标签: haskell lens

请考虑以下计划:

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")])

1 个答案:

答案 0 :(得分:2)

我能想到的最好的方法是直接寻址JSON值:

addAField :: State Data.Aeson.Value ()
addAField =
  assign (_Object . at "b") (Just (Data.Aeson.String "2"))