在写入文件时,有效地将尾随换行添加到Aeson发出的JSON ByteString

时间:2016-04-17 21:17:06

标签: json haskell aeson lazy-io

默认情况下,Aeson encodeencodePretty不会在ByteString附加一个尾随换行符。即,在vim中查看生成的文件时,我会看到[noeol]指示符。

将换行符附加到文件的高效/惯用方法是什么?

这是Main.hs的{​​{3}}:

{-# LANGUAGE DeriveGeneric #-}

import           Data.Aeson
import           Data.Aeson.Encode.Pretty
import           GHC.Generics
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Internal  as BS

data ExampleRecord =
  ExampleRecord {
       field1 :: String
     , field2 :: String
       } deriving (Show, Generic)

instance ToJSON ExampleRecord

main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b")

附带myproj.cabal文件:

name:                myproj
version:             0.1.0.0
build-type:          Simple
cabal-version:       >=1.10

executable emit-json
  main-is:             Main.hs
  build-depends:
      base >=4.8 && <4.9
    , aeson
    , aeson-pretty
    , bytestring
  default-language:    Haskell2010

我可以使用SSCCEfoo.json附加换行符,将Main.hs中的最后一行更改为:

main = L.writeFile "foo.json" $ encodePretty (ExampleRecord "a" "b") `L.snoc` BS.c2w '\n'

但是,snoc文档将此描述为O(n)操作。应该有一种方法可以在恒定的时间内附加这个换行符吗?

0 个答案:

没有答案