【发布时间】:2015-11-01 11:11:18
【问题描述】:
我想将传入的值序列化为 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"}]
我找到了pipes-aeson,但我不明白我应该如何使用它提供的功能。
编辑:我修改了 ErikR 的答案以获得Consumer,但它没有输出右括号:
jsonExporter :: Consumer (FilePath, AnalysisResult) IO ()
jsonExporter = do
lift $ putStr "["
P.map encode >-> insertCommas
lift $ putStr "]"
我不明白为什么。
【问题讨论】:
标签: json haskell aeson haskell-pipes