Agree JSON is fit for purpose where the coupling is tight, i.e., the _javascript_ running on the browser is typically sent from the server. The server code and the _javascript_ sent to the browser are managed as a tightly coupled pair. If the server needs to change, the _javascript_ (sent from the server to be run on the client side) is updated at the same time. The independent evolution (loose coupling) of the client and the server is not really an issue in this case.
Using JSON may not be optimal for true machine-to-machine exchanges where each side needs to evolve independently (yet both side are dependent on a good specification of the exchange).