-
-
Notifications
You must be signed in to change notification settings - Fork 402
print: a simpler JSON schema for export #2650
Copy link
Copy link
Open
Labels
A-WISHSome kind of improvement request or proposal.Some kind of improvement request or proposal.jsonhledger json output format, or JSON produced/consumed by hledger-web.hledger json output format, or JSON produced/consumed by hledger-web.needs-codeTo unblock: needs code/code updatesTo unblock: needs code/code updatesneeds-testingTo unblock: needs more developer testing or general usageTo unblock: needs more developer testing or general usageprint
Description
Metadata
Metadata
Assignees
Labels
A-WISHSome kind of improvement request or proposal.Some kind of improvement request or proposal.jsonhledger json output format, or JSON produced/consumed by hledger-web.hledger json output format, or JSON produced/consumed by hledger-web.needs-codeTo unblock: needs code/code updatesTo unblock: needs code/code updatesneeds-testingTo unblock: needs more developer testing or general usageTo unblock: needs more developer testing or general usageprint
Related to #1099, #1195, and others:
There's common perception that the JSON output of
print(and maybe other reports) is complex and harder-than-necessary for humans to work with. It is a bit complex, because it tries to represent the internal data types faithfully and losslessly, as far as possible.Chunhui Ouyang has been working on a simpler, easier-to-consume JSON schema, in chat. Here is the latest draft as of today:
[ { "code": "", "comment": "", "date": "", "date2": "", "payee": "", "description": "", "status": "", "tags": { "key1": "value1", "key2": "value2" }, "postings": [ { "account": "USD", "amount": [ { "commodity": "", "cost": { "commodity": "", "display_value": "", "value": "" }, "display_value": "1000.53", "value": "1000.52860" } ], "comment": "", "tags": { "key1": "value1", "key2": "value2" } } ] } ]The main difference from the current
hledger print -O jsonschema is a simpler (and more lossy, because of using json's native numbers) representation of amounts.Since print is often used for export, not just reporting, I feel the lossiness might be a problem (disrupting balanced transactions, balance assertions, etc.) But it's hard to say how much of a problem, without some testing.
Someone could add this alternate json schema to
printfairly easily. (We need to keep the existing non-lossy schema also.) Call itprint -O json2or something for now. I think what it needs next is an app using it, with real world data, so that we could get some experience with it and judge its effectiveness.Note, simple/easier to work with is the goal here. A related but different goal could be "use (or be more like) a standard schema used by others". We searched briefly and didn't find an obvious one of those. Microsoft Common Data Model and XBRL (eXtensible Business Reporting Language) were some possibilities.