在Haskell中将元组数组转换为JSON
ayone知道如何转换吗在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" } ]
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的转换。