What if I stream the data to the JSON file so I don’t have to worry about it all in memory?
Sans the JSON keyword in that quote, that’s probably exactly what the first person in history did before they wrote a database (probably an ISAM database, but still :-). In modern terms, SQLLITE might have served you well for this problem, but local RAM is almost always faster (Keep SQLLITE in mind though if you start running out of memory though. And yes, there are Go bindings for it). Now having said that, I’m glad you went the Go route because it exposed you to a really cool language.
As a long-time C/C++ developer, and a new Go developer, Go is a Godsend. Because I don’t have to futz around with header files, compiler, language, and platform incompatibilities, and easy consumption of a powerful, open-sourced chunks of code, I generally prefer it over C++. For me that is a really big deal, because this is the first language that I have preferred over “my native tongue” of C++.