Я хочу сериализовать входящие значения в JSON. Каждое значение имеет экземпляр toJSON
. Конечным результатом должен быть список. Текущий код следующий:
import Pipes
import qualified Pipes.Prelude as P
-- assume a source of elements
main :: IO ()
main = runEffect $ source >-> P.map encode >-> P.stdoutLn
Проблема в том, что таким образом каждая строка содержит действительный объект JSON, но я хочу, чтобы весь результат можно было анализировать. Я бы хотел, чтобы перед первым объектом выводился символ [
, затем каждый элемент, за которым следует запятая, и, наконец, еще один ]
. Как это сделать с трубами?
Токовый выход:
$ prog
{"key": "value"}
{"key": "value"}
Желаемый результат:
$ prog
[{"key": "value"},
{"key": "value"}]
Я нашел pipe-aeson, но не понимаю, как мне использовать функции, которые он предоставляет.
ИЗМЕНИТЬ: я изменил ответ ErikR, чтобы получить Consumer
, но закрывающая скобка не выводится:
jsonExporter :: Consumer (FilePath, AnalysisResult) IO ()
jsonExporter = do
lift $ putStr "["
P.map encode >-> insertCommas
lift $ putStr "]"
Я не могу понять почему.