Как сделать json недоступным для просмотра в браузере?
Можно проверять чтобы был заголовок HTTP_X_REQUESTED_WITH в котором указано что запрос имеет тип xmlhttprequest, т.е. ajax.
А вообще, кому оно надо - открывать в браузере url'ы из кода? Если кто-то прям очень захочет - он сам сформирует такой запрос и всё-равно получит данные. Априори нельзя защитить контент, который вы хотите отдать в браузер.
Никак. Не заморачивайся