[英]Convert SQLite database to JSON in 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)
謝謝
您從未回答過我的問題,即您所使用的sqlite版本是否支持JSON1擴展,因此此純SQL解決方案可能對您不起作用,但如果確實如此...
SELECT json_group_array(json_object('rank', rank
, 'name', name
, 'director', director
, 'year', year
, 'rating', rating
, 'starring', starring))
FROM movies;
將返回一個字符串,該字符串是一個JSON數組,該表的每一行都有一個JSON對象。
在Aeson中,您有以下實例:
instance ToJSON a => ToJSON [a]
因此,您可以將整個列表傳遞給encodeToLazyText
,它將延遲創建一個JSON數組。
例如:
main = I.writeFile "DB.json" (encodeToLazyText [convertToJson,convertToJson])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.