What QIF is
QIF is a plain text list of transactions, one field per line, each line beginning with a single letter that says which field it is. D is the date, T the amount, P the payee. A caret on its own line ends a transaction.
Quicken, and the long tail of banks and budgeting apps that still offer it because everything can read it.
What JSON is
JSON is a text format for nested data: objects with named keys, arrays, strings, numbers, booleans and null. It has no date type and no comments.
Every web API, most configuration files and anything that talks to JavaScript.
What changes when you convert QIF to JSON
Each block up to a caret becomes a row. Split transactions, which QIF writes as repeated S, E and $ lines, are joined into single cells rather than being spread across as many columns as the most-split transaction in the file has parts. The account type from the !Type header is added as a column.
You choose the shape. An array of objects is the default and the one most code expects. A 2D array is smaller. Column arrays suit charting libraries. A keyed object suits lookups by id.
What carries over from QIF to JSON
One property of the QIF has no home in JSON, and it is worth knowing which before you convert.
JSON wants a type for each column, and QIF does not record one, so each column is typed from what its values look like. A column of digits that should stay text - a zip code, a phone number, a leading-zero id - is the usual thing to check afterwards.
QIF can be read one record at a time. JSON has to be complete before it means anything, so the whole table is held in memory while it is written and a file that gets cut off part way through is not partly usable - it is unusable.