From 5f1a864c20263d14b590d5e635186e5bf30e9201 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 23 May 2020 13:30:22 -0700 Subject: [PATCH] print,reg,balcmds: fix JSON output, which wasn't JSON (#689) --- hledger/Hledger/Cli/Commands/Balance.hs | 7 ++++--- hledger/Hledger/Cli/Commands/Print.hs | 4 +++- hledger/Hledger/Cli/Commands/Register.hs | 4 +++- hledger/Hledger/Cli/CompoundBalanceCommand.hs | 3 ++- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index 890a462a1..a4dfa2444 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -254,6 +254,7 @@ module Hledger.Cli.Commands.Balance ( ) where import Data.Aeson (toJSON) +import Data.Aeson.Text (encodeToLazyText) import Data.List import Data.Maybe --import qualified Data.Map as Map @@ -319,7 +320,7 @@ balance opts@CliOpts{rawopts_=rawopts,reportopts_=ropts@ReportOpts{..}} j = do assrt = not $ ignore_assertions_ $ inputopts_ opts render = case fmt of "txt" -> budgetReportAsText ropts - "json" -> (++"\n") . pshow . toJSON -- XXX pshow for pretty output, but it may generate some junk + "json" -> (++"\n") . T.unpack . TL.toStrict . encodeToLazyText . toJSON _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render budgetreport @@ -330,7 +331,7 @@ balance opts@CliOpts{rawopts_=rawopts,reportopts_=ropts@ReportOpts{..}} j = do "txt" -> multiBalanceReportAsText ropts "csv" -> (++"\n") . printCSV . multiBalanceReportAsCsv ropts "html" -> (++"\n") . TL.unpack . L.renderText . multiBalanceReportAsHtml ropts - "json" -> (++"\n") . pshow . toJSON -- XXX pshow for pretty output, but it may generate some junk + "json" -> (++"\n") . T.unpack . TL.toStrict . encodeToLazyText . toJSON _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render report @@ -345,7 +346,7 @@ balance opts@CliOpts{rawopts_=rawopts,reportopts_=ropts@ReportOpts{..}} j = do render = case fmt of "txt" -> balanceReportAsText "csv" -> \ropts r -> (++ "\n") $ printCSV $ balanceReportAsCsv ropts r - "json" -> const $ (++"\n") . pshow . toJSON -- XXX pshow for pretty output, but it may generate some junk + "json" -> const $ (++"\n") . T.unpack . TL.toStrict . encodeToLazyText . toJSON _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render ropts report diff --git a/hledger/Hledger/Cli/Commands/Print.hs b/hledger/Hledger/Cli/Commands/Print.hs index 32631b6af..ff329455d 100644 --- a/hledger/Hledger/Cli/Commands/Print.hs +++ b/hledger/Hledger/Cli/Commands/Print.hs @@ -16,9 +16,11 @@ module Hledger.Cli.Commands.Print ( where import Data.Aeson (toJSON) +import Data.Aeson.Text (encodeToLazyText) import Data.Maybe (isJust) import Data.Text (Text) import qualified Data.Text as T +import qualified Data.Text.Lazy as T (toStrict) import System.Console.CmdArgs.Explicit import Hledger.Read.CsvReader (CSV, printCSV) @@ -57,7 +59,7 @@ printEntries opts@CliOpts{reportopts_=ropts} j = do render = case fmt of "txt" -> entriesReportAsText opts "csv" -> (++"\n") . printCSV . entriesReportAsCsv - "json" -> (++"\n") . pshow . toJSON -- XXX pshow for pretty output, but it may generate some junk + "json" -> (++"\n") . T.unpack . T.toStrict . encodeToLazyText . toJSON _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render $ entriesReport ropts q j diff --git a/hledger/Hledger/Cli/Commands/Register.hs b/hledger/Hledger/Cli/Commands/Register.hs index 964c5a469..897bf0bd9 100644 --- a/hledger/Hledger/Cli/Commands/Register.hs +++ b/hledger/Hledger/Cli/Commands/Register.hs @@ -19,10 +19,12 @@ module Hledger.Cli.Commands.Register ( ) where import Data.Aeson (toJSON) +import Data.Aeson.Text (encodeToLazyText) import Data.List import Data.Maybe -- import Data.Text (Text) import qualified Data.Text as T +import qualified Data.Text.Lazy as TL import System.Console.CmdArgs.Explicit import Hledger.Read.CsvReader (CSV, CsvRecord, printCSV) @@ -61,7 +63,7 @@ register opts@CliOpts{reportopts_=ropts} j = do let fmt = outputFormatFromOpts opts render | fmt=="txt" = postingsReportAsText | fmt=="csv" = const ((++"\n") . printCSV . postingsReportAsCsv) - | fmt=="json" = const ((++"\n") . pshow . toJSON) -- XXX pshow for pretty output, but it may generate some junk + | fmt=="json" = const ((++"\n") . T.unpack . TL.toStrict . encodeToLazyText . toJSON) | otherwise = const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render opts $ postingsReport ropts (queryFromOpts d ropts) j diff --git a/hledger/Hledger/Cli/CompoundBalanceCommand.hs b/hledger/Hledger/Cli/CompoundBalanceCommand.hs index b76af8c60..2cfd1b620 100644 --- a/hledger/Hledger/Cli/CompoundBalanceCommand.hs +++ b/hledger/Hledger/Cli/CompoundBalanceCommand.hs @@ -14,6 +14,7 @@ module Hledger.Cli.CompoundBalanceCommand ( ) where import Data.Aeson (toJSON) +import Data.Aeson.Text (encodeToLazyText) import Data.List (foldl') import Data.Maybe import qualified Data.Text as TS @@ -240,7 +241,7 @@ compoundBalanceCommand CompoundBalanceCommandSpec{..} opts@CliOpts{reportopts_=r "txt" -> compoundBalanceReportAsText ropts' cbr "csv" -> printCSV (compoundBalanceReportAsCsv ropts cbr) ++ "\n" "html" -> (++"\n") $ TL.unpack $ L.renderText $ compoundBalanceReportAsHtml ropts cbr - "json" -> (++"\n") $ pshow $ toJSON cbr -- XXX pshow for pretty output, but it may generate some junk + "json" -> (++"\n") $ TS.unpack $ TL.toStrict $ encodeToLazyText $ toJSON cbr _ -> error' $ unsupportedOutputFormatError fmt -- | Summarise one or more (inclusive) end dates, in a way that's