Use protocol buffers! As easy to use as JSON in dynamic languages, gives you strongly-typed accessors in static languages.
But the google people seem to love them, so I'm probably in the minority.
Me either! Which is why I'm working on a high-performance Protocol Buffer library that does not do code generation: https://github.com/haberman/upb/wiki
Thanks for that.
(edit: It wasn't the readme, it was the wiki page. Still, excellent documentation.)