Конвертировать базу данных SQLite в JSON в Haskell - PullRequest
0 голосов
/ 04 декабря 2018

Есть ли способ выгрузить базу данных SQLite в файл JSON в Haskell?Все остальные вопросы - разбор json и сохранение в sqlite.Кажется, я не могу найти какую-либо ссылку на это, пожалуйста, помогите мне.

Я создал простое приложение на Haskell, используя стек, который извлекает подробности о фильмах из веб-источника HTML, применяя функции haskell, а затем сохраняет данные вфайл базы данных SQLite.Цель приложения - позволить пользователям запрашивать базу данных.База данных состоит из 1 таблицы, называемой «фильмы».

Я хочу написать модуль, который генерирует JSON-представление моих данных на Haskell для выгрузки базы данных SQLite в файл JSON.

Таблица SQLite:


rank |имя |директор |год |рейтинг |В ролях |


Это то, что мне удалось придумать до сих пор.Это создает файл 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 голосов
/ 07 декабря 2018

В Aeson у вас есть этот экземпляр:

instance ToJSON a => ToJSON [a]

Таким образом, вы можете просто передать весь список в encodeToLazyText, и он будет лениво создавать массив JSON.

Например:

main = I.writeFile "DB.json" (encodeToLazyText [convertToJson,convertToJson])
0 голосов
/ 06 декабря 2018

Вы никогда не отвечали на мой вопрос о том, поддерживает ли используемая вами версия 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 на строку таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...