JSON Parsing With Ruby One-liner ?
Parsing JSON is one of the most common tasks that any web developer does in his daily activities.
Parsing JSON with ruby with is fun and the fun multiples n.times when the code is a one-liner
Indeed some gems are needed along with ruby and rubygems, you shall need :
gem install rest-client
With all the above gems, begins the fun! Say you have a simple json that gives the IP of your machine unlike http://h3manth.com/ip.php which was specifically designed for jsonp!
So say the json string is like {ip:192.71.223.65}
Using the simple ruby one-liner below, this is what happens with that json:
require ‘rubygems’ require ‘json’ require ‘rest-client’
json_ip_url = “http://ifconfig.me/all.json”
The killer one line ruby json parsing!
ip_details = JSON.parse(RestClient.get(json_ip_url))
The json from the URL looks like :
{
"connection": "keep-alive",
"ip_addr": "192.71.223.65",
"lang": "en-US,en;q=0.8",
"remote_host": "NSG-Static-066.223.71.182.airtel.in",
"user_agent": "Mozilla/5.0",
"charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
"port": "4532",
"via": "",
"forwarded": "",
"mime":"text/html,application/xhtml+xml,application/xml;q=0.9",
"keep_alive": "",
"encoding": "gzip,deflate,sdch"
}
And the killer ruby one line JSON parser Crack::JSON.parse(RestClient.get(json_ip_url)) returns a wonderful hash like :
{
"connection" = > "",
"ip_addr" = > "192.71.223.65",
"lang" = > "",
"remote_host" = > "NSG-Static-066.223.71.182.airtel.in",
"user_agent" = > "Ruby",
"charset" = > "",
"port" = > "24436",
"via" = > "",
"forwarded" = > "",
"mime" = > "* / *; q=0.5, application/xml",
"keep_alive" = > "",
"encoding" = > "gzip, deflate"
}
With that, one can just use ip_details[“json_key”] to get the required details!
Let’s try something more, one liners are always fun and when it’s ruby and the web, it’s more fun!
Let’s get the top three images from Google image search!
!/usr/bin/env ruby
require ‘rubygems’ require ‘json’ require ‘rest-client’ require ‘uri’
def get_imgs(term) url=‘https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=‘+URI.escape(term) imgs = JSON.parse(RestClient.get(url)) for img in imgs[“responseData”][“results”]
puts img["url"]
end
end
=being
get_imgs(“yoda”) would print
http://images.wikia.com/starwars/images/e/e0/Yoda_SWSB.jpg http://upload.wikimedia.org/wikipedia/en/thumb/9/96/CGIYoda.jpg/200px-CGIYoda.jpg http://i.dailymail.co.uk/i/pix/2010/10/06/article-1318093-0B803914000005DC-954_306x423.jpg http://altjapan.typepad.com/.a/6a00d8341bfd2253ef00e55426d7bb8834-320wi
=end
So far this has been my best way of parsing JSON with ruby, what’s yours?
Edit : Define one-liner? :D It must have been JSON parsing in a line, right?
About Hemanth HM
Hemanth HM is a Sr. Machine Learning Manager at PayPal, Google Developer Expert, TC39 delegate, FOSS advocate, and community leader with a passion for programming, AI, and open-source contributions.