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

时间:2014-06-17 15:42:25

标签: json haskell aeson

是否有人知道如何转换

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

与JSON类似

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

使用(最好)Aeson?

1 个答案:

答案 0 :(得分:4)

Aeson toJSON函数应按原样转换tt,但它不会为您提供字段名称。获取名称创建自定义数据类型(可能是等效于(Int,String)的数据类型,以在这些字段上放置名称)并派生自己的ToJSON as described in the docs.自定义实例。对于您想要做的事情您可能只能使用deriving Generic并声明ToJSON的实例。

编辑:试过这个并且它工作正常,但如果你真的需要将该数据字段命名为数据,那么你必须编写一个自定义的toJSON实例,因为data是一个保留的Haskell中的关键字,您不能将其用作任何名称。