First - I use json files all the time, it’s just that I have to explicitly tell engine to bundle them when packaging and have to manage them from outside asset manager. Reading packaged files using c++ is easy too, there are functions and classes in API and even JSON parser is available. Well, to be precise, I use “.json” files for data tables only and store my own json-based data not containing list of structs in custom file format that is actually json but differently named so engine don’t try to do anything with it on it’s own.
Second - you always could write your own importer for whatever format you like.
Third - data table is not a bad thing or something unknown and scary, it just coincidentally is that data tables could be saved as json and so engine thinks that json is used to store data table.