有什么方法可以将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)
谢谢
答案 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])