簡體   English   中英

在Haskell中將SQLite數據庫轉換為JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM