The main advantage of JSON is that it is human-readable. This is great if you want to save the data on disc and be able to get it without needing special software, or if you want to write it out by hand but be able to parse it by a computer. I actually had done that, I maintained a number of records by hand and use a small script to splice the data in a modified form into a LaTeX document.
However, being text-based becomes a liability when there is no need for human readability. For instance, if you want to send data between processes there will never be a human who will eyeball it, size and parsing efficiency are much more important. JSON is non-trivial to parse. I am writing this implementation of MessagePack because I want to be able to write a Neovim client for Guile. This will effectively allow writing Neovim plugins in Guile: Neovim launches an external Guile process and the two processes communicate via RPC using MessagePack as the protocol. This way Neovim can be retrofitted with any language for writing plugins; old Vim needed be be compiled with support for foreign scripting languages baked into the binary.