One of the main reasons for choosing JSON over XML is that the JSON libraries seemed to have better support for multiple Ruby implementations (Ruby 1.8, Ruby 1.9, JRuby, etc.). The JSON gems (json, json-pure, and json-jruby) are implemented with the same interface, so you can easily interchange them. Running the C-extension JSON gem has great performance. If you need pure Ruby, then the json_pure gem drops in perfectly. JRuby also has a Java implementation of the gem that works really well. I couldn't find the same thing with any of the XML parsers.
Over the past couple of years, I had been frustrated with Ruby's XML support. The Rexml library would run on all implementations, but it is SLOW. It used to be that the API would return really large XML documents for simple search results if you hit an IOUS/IOUF in the results. The performance was horrible. I reimplemented all of the XML parsing in libxml-ruby and in Hpricot to benchmark. Libxml-ruby seemed to have the best performance at the time and changing the XML creation code to Hpricot would have been a lot of work. I switched my code over to support libxml-ruby. Using libxml-ruby came with a drawback in that I could no longer run my library on the other implementations.
Working with XML in Ruby had been a real pain. The namespacing in the XML was tough because namespace support in many of the Ruby libraries was buggy.
It looks like XML is finally starting to look better with Nokogiri, but this still doesn't provide a pure ruby implementation for maximum portability. I've used Nokogiri quite a bit for HTML parsing with Mechanize, and it is quite slick.
JSON has worked well for me, but if you have frustrations with it, let me know.
--
Jimmy