But back to storage for a personal budgeting app...if you use JSON, you'll have the big advantage that there won't be much difference between your objects and your persistent data. JSON translates to Java/Kotlin easily. The main downside -- performance and RAM over a large data file -- might not be relevant for your use case.
With K4Stem, we're just saving for a flat file because we don't anticipate more than a few thousand records and figure that we have the RAM to carry the model around with us. That means that all of the querying, etc is done with Kotlin syntax.
I'd have totally different advice for larger sets, remote access, and concurrent use.