Haskell 如何使用镜头重命名JSON对象中的键?

Haskell 如何使用镜头重命名JSON对象中的键?,haskell,haskell-lens,Haskell,Haskell Lens,我正在努力使用函数和函数来将{“foo”:“abc”}更改为{“bar”:“abc”} 注:我正在使用微透镜系列的包装,如果这有什么区别的话。在和键透镜用于更改地图状物体的值。如果要更改密钥,请使用旧密钥的值设置新密钥并删除旧密钥。我现在无法访问编译器,因此此代码可能无法编译: -- I think `at` can be substitute by `key` if your types allow it -- |

我正在努力使用函数和函数来将
{“foo”:“abc”}
更改为
{“bar”:“abc”}


注:我正在使用
微透镜
系列的包装,如果这有什么区别的话。

透镜用于更改地图状物体的值。如果要更改密钥,请使用旧密钥的值设置新密钥并删除旧密钥。我现在无法访问编译器,因此此代码可能无法编译:

-- I think `at` can be substitute by `key` if your types allow it

--                                        |- sets the new key to the old value
--                                        |                |- deletes the old key
updateKey oldKey newKey myjson = myjson & at newKey .~ v & at oldKey .~ Nothing
  where v = myjson ^. at oldKey

似乎不起作用
(undefined::Aeson.Value)&at“mKey”~没有任何内容给出以下错误
没有(Lens.Micro.Internal.at Value)的实例
@SaurabhNanda抱歉,你到底想做什么
Aeson.Value
是一个json值,不是一对
key:Value
,显然,没有key就不能查询单个值。如果Aeson.Value包含一个Aeson.Object,那么我想重命名一个key。@SaurabhNanda尝试这两个
(未定义的::Aeson.Object)&在“mKey”~没有任何内容
(未定义::Lens.Micro.Type.transversal'Aeson.Value Aeson.Value)&键“mKey”。~无任何内容