在Haskell中将元组数组转换为JSON

在Haskell中将元组数组转换为JSON,json,haskell,aeson,Json,Haskell,Aeson,ayone知道如何转换吗 tt :: (Int, [(Int, String)]) tt = (777, [(1, "AA") , (2, "BB") , (3, "CC")]) 类似于 { "user": 777, "data": [ { "num": 1 , "typ": "AA" }, { "num": 2 , "typ": "BB" }, { "num": 3 , "typ": "CC" } ]

ayone知道如何转换吗

tt :: (Int, [(Int, String)])
tt = (777, [(1, "AA") , (2, "BB") , (3, "CC")])
类似于

{
"user": 777,
"data": [ 
            { "num": 1 , "typ": "AA" },
            { "num": 2 , "typ": "BB" },
            { "num": 3 , "typ": "CC" } 
        ]
}

使用(最好)Aeson

Aeson
toJSON
函数应该按原样转换
tt
,但它不会给出字段名。要获取名称,请创建一个自定义数据类型(可能是一个相当于(Int,String)的数据类型,在这些字段上加上名称)并派生您自己的
ToJSON
自定义实例,您可能只需要
派生Generic
并声明
ToJSON


编辑:刚刚尝试了这个方法,效果很好,但是如果您真的需要将该数据字段命名为data,那么您必须编写一个自定义的
toJSON
实例,因为
data
是Haskell中的一个保留关键字,您不能将其用作任何名称。

是的,我会这样做。这并不意味着我会给你一个解决方案。您尝试了什么?将对您有所帮助。使用某些数据类型而不是嵌套元组将更为惯用(共识似乎更易于维护/解释)。它看起来还可以简化到json的转换。