Files
cryptoanarchywiki.github.io/_site/ruby/2013/12/23/ruby-json.html
2016-04-19 13:49:03 +07:00

105 lines
6.2 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="/img/favicon.ico" />
<title> Parsing JSON with Ruby </title>
<!-- syntax highlighting CSS -->
<link rel="stylesheet" href="/css/syntax.css">
<!-- Bootstrap core CSS -->
<link href="/css/bootstrap.min.css" rel="stylesheet">
<!-- Fonts -->
<link href="//fonts.googleapis.com/css?family=Roboto+Condensed:400,300italic,300,400italic,700&amp;subset=latin,latin-ext" rel="stylesheet" type="text/css">
<!-- Custom CSS -->
<link rel="stylesheet" href="/css/main.css">
</head>
<body>
<div class="container">
<div class="col-sm-3">
<img id="about" src="/img/avatar.jpg" height="75px" width="75px" />
<h1 class="author-name">Agus Makmun</h1>
<div id="about">
I am freelance developer. Currently doing more in backend, actually in Python and Django.
</div>
<hr />
<strong>Navigation</strong><br />
&raquo; <a href="">Home</a> <br />
&raquo; <a class="about" href="/about/">About Me</a><br />
&raquo; <a class="about" href="https://github.com/agusmakmun">Github</a><br />
&raquo; <a class="about" href="/sitemap.xml">XML Sitemap</a><br />
</div>
<div class="col-sm-8 col-offset-1">
<h1>Parsing JSON with Ruby</h1>
<span class="time">23 Dec 2013</span>
<div class="content">
<div class="post"><p>Parsing JSON with Ruby is actually extremely easy. All you have to do is have the json gem installed (<code class="highlighter-rouge">gem install json</code>) and call the <code class="highlighter-rouge">JSON.parse</code> method on the JSON data to convert it to ruby hashes. If you look at this small program here, you can see how I have implemented parsing JSON in Ruby.</p>
<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="c1">#!/usr/bin/env ruby</span>
<span class="nb">require</span> <span class="s1">'json'</span>
<span class="nb">require</span> <span class="s1">'net/http'</span>
<span class="nb">require</span> <span class="s1">'libnotify'</span>
<span class="k">def</span> <span class="nf">parsejson</span>
<span class="n">file</span> <span class="o">=</span> <span class="s2">"http://api.openweathermap.org/data/2.5/find?q=London&amp;mode=json"</span>
<span class="n">response</span> <span class="o">=</span> <span class="no">Net</span><span class="o">::</span><span class="no">HTTP</span><span class="p">.</span><span class="nf">get_response</span><span class="p">(</span><span class="no">URI</span><span class="p">.</span><span class="nf">parse</span><span class="p">(</span><span class="n">file</span><span class="p">))</span>
<span class="n">weatherjson</span> <span class="o">=</span> <span class="n">response</span><span class="p">.</span><span class="nf">body</span>
<span class="n">actual</span> <span class="o">=</span> <span class="no">JSON</span><span class="p">.</span><span class="nf">parse</span><span class="p">(</span><span class="n">weatherjson</span><span class="p">)</span>
<span class="c1"># check for errors</span>
<span class="k">if</span> <span class="n">actual</span><span class="p">.</span><span class="nf">has_key?</span> <span class="s1">'Error'</span>
<span class="k">raise</span> <span class="s2">"error with the url"</span>
<span class="k">end</span>
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">actual</span><span class="p">[</span><span class="s2">"list"</span><span class="p">].</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">listitem</span><span class="o">|</span>
<span class="n">weather</span> <span class="o">=</span> <span class="n">listitem</span><span class="p">[</span><span class="s2">"weather"</span><span class="p">]</span>
<span class="n">weather</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">weath</span><span class="o">|</span>
<span class="n">results</span><span class="p">.</span><span class="nf">push</span><span class="p">(</span><span class="n">weath</span><span class="p">[</span><span class="s2">"description"</span><span class="p">])</span>
<span class="k">end</span>
<span class="n">main</span> <span class="o">=</span> <span class="n">listitem</span><span class="p">[</span><span class="s2">"main"</span><span class="p">]</span>
<span class="n">temp</span> <span class="o">=</span> <span class="n">main</span><span class="p">[</span><span class="s2">"temp"</span><span class="p">]</span> <span class="o">-</span> <span class="mi">273</span><span class="o">.</span><span class="mi">15</span>
<span class="n">results</span><span class="p">.</span><span class="nf">push</span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">temp</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">return</span> <span class="n">results</span>
<span class="k">end</span></code></pre></figure>
</div>
</div>
<footer>
&copy; Agus Makmun
- <a href="https://github.com/agusmakmun">https://github.com/agusmakmun</a> - Powered by Jekyll.
</footer>
</div><!-- end /.col-sm-8 -->
</div><!-- end /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>