imp: json: The keys of JSON objects are now displayed in alphabetical order, making it stable across different systems and compilers.
This commit is contained in:
		
							parent
							
								
									50b915d12a
								
							
						
					
					
						commit
						c606f874fb
					
				| @ -34,13 +34,13 @@ module Hledger.Data.Json ( | ||||
| ) where | ||||
| 
 | ||||
| import           Data.Aeson | ||||
| import           Data.Aeson.Encode.Pretty (encodePrettyToTextBuilder) | ||||
| import           Data.Aeson.Encode.Pretty (Config(..), Indent(..), NumberFormat(..), | ||||
|                      encodePretty', encodePrettyToTextBuilder') | ||||
| --import           Data.Aeson.TH | ||||
| import qualified Data.ByteString.Lazy as BL | ||||
| import           Data.Decimal (DecimalRaw(..), roundTo) | ||||
| import           Data.Maybe (fromMaybe) | ||||
| import qualified Data.Text.Lazy    as TL | ||||
| import qualified Data.Text.Lazy.IO as TL | ||||
| import qualified Data.Text.Lazy.Builder as TB | ||||
| import           GHC.Generics (Generic) | ||||
| import           System.Time (ClockTime) | ||||
| @ -259,15 +259,18 @@ instance FromJSON (DecimalRaw Integer) | ||||
| 
 | ||||
| -- Utilities | ||||
| 
 | ||||
| -- | Config for pretty printing JSON output. | ||||
| jsonConf :: Config | ||||
| jsonConf = Config{confIndent=Spaces 4,confCompare=compare, confNumFormat=Generic, confTrailingNewline=True} | ||||
| 
 | ||||
| -- | Show a JSON-convertible haskell value as pretty-printed JSON text. | ||||
| toJsonText :: ToJSON a => a -> TL.Text | ||||
| toJsonText = TB.toLazyText . (<> TB.fromText "\n") . encodePrettyToTextBuilder | ||||
| toJsonText = TB.toLazyText . encodePrettyToTextBuilder' jsonConf | ||||
| 
 | ||||
| -- | Write a JSON-convertible haskell value to a pretty-printed JSON file. | ||||
| -- Eg: writeJsonFile "a.json" nulltransaction | ||||
| writeJsonFile :: ToJSON a => FilePath -> a -> IO () | ||||
| writeJsonFile f = TL.writeFile f . toJsonText | ||||
| -- we write with Text and read with ByteString, is that fine ? | ||||
| writeJsonFile f = BL.writeFile f . encodePretty' jsonConf | ||||
| 
 | ||||
| -- | Read a JSON file and decode it to the target type, or raise an error if we can't. | ||||
| -- Eg: readJsonFile "a.json" :: IO Transaction | ||||
| @ -280,4 +283,3 @@ readJsonFile f = do | ||||
|   case fromJSON v :: FromJSON a => Result a of | ||||
|     Error e   -> error e | ||||
|     Success t -> return t | ||||
| 
 | ||||
|  | ||||
| @ -10,52 +10,52 @@ $ hledger -f- reg --output-format=json | ||||
|         null, | ||||
|         "", | ||||
|         { | ||||
|             "pbalanceassertion": null, | ||||
|             "pstatus": "Unmarked", | ||||
|             "paccount": "a", | ||||
|             "pamount": [ | ||||
|                 { | ||||
|                     "aprice": null, | ||||
|                     "acommodity": "AAA", | ||||
|                     "aquantity": { | ||||
|                         "floatingPoint": 1, | ||||
|                         "decimalPlaces": 1, | ||||
|                         "decimalMantissa": 10 | ||||
|                     }, | ||||
|                     "aismultiplier": false, | ||||
|                     "aprice": null, | ||||
|                     "aquantity": { | ||||
|                         "decimalMantissa": 10, | ||||
|                         "decimalPlaces": 1, | ||||
|                         "floatingPoint": 1 | ||||
|                     }, | ||||
|                     "astyle": { | ||||
|                         "ascommodityside": "R", | ||||
|                         "asdigitgroups": null, | ||||
|                         "ascommodityspaced": true, | ||||
|                         "asprecision": 1, | ||||
|                         "asdecimalpoint": "." | ||||
|                         "asdecimalpoint": ".", | ||||
|                         "asdigitgroups": null, | ||||
|                         "asprecision": 1 | ||||
|                     } | ||||
|                 } | ||||
|             ], | ||||
|             "ptransaction_": "1", | ||||
|             "paccount": "a", | ||||
|             "pdate": null, | ||||
|             "ptype": "VirtualPosting", | ||||
|             "pbalanceassertion": null, | ||||
|             "pcomment": "", | ||||
|             "pdate": null, | ||||
|             "pdate2": null, | ||||
|             "poriginal": null, | ||||
|             "pstatus": "Unmarked", | ||||
|             "ptags": [], | ||||
|             "poriginal": null | ||||
|             "ptransaction_": "1", | ||||
|             "ptype": "VirtualPosting" | ||||
|         }, | ||||
|         [ | ||||
|             { | ||||
|                 "aprice": null, | ||||
|                 "acommodity": "AAA", | ||||
|                 "aquantity": { | ||||
|                     "floatingPoint": 1, | ||||
|                     "decimalPlaces": 1, | ||||
|                     "decimalMantissa": 10 | ||||
|                 }, | ||||
|                 "aismultiplier": false, | ||||
|                 "aprice": null, | ||||
|                 "aquantity": { | ||||
|                     "decimalMantissa": 10, | ||||
|                     "decimalPlaces": 1, | ||||
|                     "floatingPoint": 1 | ||||
|                 }, | ||||
|                 "astyle": { | ||||
|                     "ascommodityside": "R", | ||||
|                     "asdigitgroups": null, | ||||
|                     "ascommodityspaced": true, | ||||
|                     "asprecision": 1, | ||||
|                     "asdecimalpoint": "." | ||||
|                     "asdecimalpoint": ".", | ||||
|                     "asdigitgroups": null, | ||||
|                     "asprecision": 1 | ||||
|                 } | ||||
|             } | ||||
|         ] | ||||
| @ -72,20 +72,20 @@ $ hledger -f- bal --output-format=json | ||||
|             0, | ||||
|             [ | ||||
|                 { | ||||
|                     "aprice": null, | ||||
|                     "acommodity": "AAA", | ||||
|                     "aquantity": { | ||||
|                         "floatingPoint": 1, | ||||
|                         "decimalPlaces": 1, | ||||
|                         "decimalMantissa": 10 | ||||
|                     }, | ||||
|                     "aismultiplier": false, | ||||
|                     "aprice": null, | ||||
|                     "aquantity": { | ||||
|                         "decimalMantissa": 10, | ||||
|                         "decimalPlaces": 1, | ||||
|                         "floatingPoint": 1 | ||||
|                     }, | ||||
|                     "astyle": { | ||||
|                         "ascommodityside": "R", | ||||
|                         "asdigitgroups": null, | ||||
|                         "ascommodityspaced": true, | ||||
|                         "asprecision": 1, | ||||
|                         "asdecimalpoint": "." | ||||
|                         "asdecimalpoint": ".", | ||||
|                         "asdigitgroups": null, | ||||
|                         "asprecision": 1 | ||||
|                     } | ||||
|                 } | ||||
|             ] | ||||
| @ -93,20 +93,20 @@ $ hledger -f- bal --output-format=json | ||||
|     ], | ||||
|     [ | ||||
|         { | ||||
|             "aprice": null, | ||||
|             "acommodity": "AAA", | ||||
|             "aquantity": { | ||||
|                 "floatingPoint": 1, | ||||
|                 "decimalPlaces": 1, | ||||
|                 "decimalMantissa": 10 | ||||
|             }, | ||||
|             "aismultiplier": false, | ||||
|             "aprice": null, | ||||
|             "aquantity": { | ||||
|                 "decimalMantissa": 10, | ||||
|                 "decimalPlaces": 1, | ||||
|                 "floatingPoint": 1 | ||||
|             }, | ||||
|             "astyle": { | ||||
|                 "ascommodityside": "R", | ||||
|                 "asdigitgroups": null, | ||||
|                 "ascommodityspaced": true, | ||||
|                 "asprecision": 1, | ||||
|                 "asdecimalpoint": "." | ||||
|                 "asdecimalpoint": ".", | ||||
|                 "asdigitgroups": null, | ||||
|                 "asprecision": 1 | ||||
|             } | ||||
|         } | ||||
|     ] | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user