在Haskell中将SQLite数据库转换为JSON

时间:2018-12-04 19:22:28

标签: json sqlite haskell

有什么方法可以将SQLite数据库转储到Haskell中的JSON文件中?所有其他问题都是解析json并保存到sqlite。我似乎找不到任何参考,请帮助我。

我使用堆栈创建了一个简单的haskell应用程序,该应用程序通过应用haskell函数从HTML Web源中获取有关电影的详细信息,然后将数据保存到SQLite数据库文件中。该应用程序的目的是允许用户查询数据库。该数据库包含1个表,称为“电影”。

我想编写一个模块,该模块生成Haskell数据的JSON表示形式,以将SQLite数据库转储到JSON文件中。

SQLite表:


排名|名称|导演|年|评级|主演|


到目前为止,这是我设法解决的问题。这将创建具有单个记录的JSON文件。

{-# LANGUAGE OverloadedStrings, DeriveGeneric, DeriveAnyClass #-}

import GHC.Generics
import Data.Text.Lazy (Text)
import Data.Text.Lazy.IO as I
import Data.Aeson.Text (encodeToLazyText)
import Data.Aeson (ToJSON)
-- Custom Datatype
data Movie = Movie {
      rank :: Int,          
      name :: String,       
      director :: String,   
      year :: Int,          
      rating :: Double,     
      starring :: String    
      } deriving (Show, Generic, ToJSON) 

convertToJson = Movie { rank = 125, name = "Puzzle", director = "Marc Turtletaub", year = 2018 , rating = 83, starring = "Kelly Macdonald" }

main = I.writeFile "DB.json" (encodeToLazyText convertToJson)

谢谢

2 个答案:

答案 0 :(得分:1)

您从未回答过有关您所使用的sqlite版本是否支持JSON1扩展的问题,所以此纯SQL解决方案可能对您不起作用,但是如果您...

R(iheaders, 1) = SR(5, iSR) 
M(iheaders, 1) = OAS(6, iOAS) 
O(iheaders, 1) = OAS(7, iOAS) 
Q(iheaders, 1) = OAS(8, iOAS) 

将返回一个字符串,该字符串是一个JSON数组,该表的每一行都有一个JSON对象。

答案 1 :(得分:1)

在Aeson中,您有以下实例:

instance ToJSON a => ToJSON [a]

因此您可以将整个列表传递到encodeToLazyText,它将懒惰地创建JSON数组。

例如:

main = I.writeFile "DB.json" (encodeToLazyText [convertToJson,convertToJson])