You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
parson/index.html

139 lines
8.8 KiB

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<link href='https://fonts.googleapis.com/css?family=Chivo:900' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
<link rel="stylesheet" type="text/css" href="stylesheets/pygment_trac.css" media="screen" />
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<title>parson by kgabis</title>
</head>
<body>
<div id="container">
<div class="inner">
<header>
<h1>parson</h1>
<h2>Lightweight json parser and reader written in C.</h2>
</header>
<section id="downloads" class="clearfix">
<a href="https://github.com/kgabis/parson/zipball/master" id="download-zip" class="button"><span>Download .zip</span></a>
<a href="https://github.com/kgabis/parson/tarball/master" id="download-tar-gz" class="button"><span>Download .tar.gz</span></a>
<a href="https://github.com/kgabis/parson" id="view-on-github" class="button"><span>View on GitHub</span></a>
</section>
<hr>
<section id="main_content">
<h2>About</h2>
<p>Parson is a lighweight <a href="http://json.org">json</a> parser and reader written in C. </p>
<h2>Features</h2>
<ul>
<li>Lightweight (only 2 files)</li>
<li>Simple API</li>
<li>Addressing json values with dot notation (similiar to C structs or objects in most OO languages, e.g. "objectA.objectB.value")</li>
<li>C89 compatible</li>
<li>Test suites</li>
</ul><h2>Installation</h2>
<p>Run the following code:</p>
<pre><code>git clone https://github.com/kgabis/parson.git
</code></pre>
<p>and copy parson.h and parson.c to you source code tree.</p>
<p>Run <code>make test</code> to compile and run tests.</p>
<h2>Example</h2>
<p>Here is a function, which prints basic commit info (date, sha and author) from a github repository. It's also included in tests.c file, you can just uncomment and run it.</p>
<div class="highlight"><pre><span class="kt">void</span> <span class="nf">print_commits_info</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">username</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">repo</span><span class="p">)</span> <span class="p">{</span>
<span class="n">JSON_Value</span> <span class="o">*</span><span class="n">root_value</span><span class="p">;</span>
<span class="n">JSON_Array</span> <span class="o">*</span><span class="n">commits</span><span class="p">;</span>
<span class="n">JSON_Object</span> <span class="o">*</span><span class="n">commit</span><span class="p">;</span>
<span class="kt">size_t</span> <span class="n">i</span><span class="p">;</span>
<span class="kt">char</span> <span class="n">curl_command</span><span class="p">[</span><span class="mi">512</span><span class="p">];</span>
<span class="kt">char</span> <span class="n">cleanup_command</span><span class="p">[</span><span class="mi">256</span><span class="p">];</span>
<span class="kt">char</span> <span class="n">output_filename</span><span class="p">[]</span> <span class="o">=</span> <span class="s">"commits.json"</span><span class="p">;</span>
<span class="cm">/* it ain't pretty, but it's not a libcurl tutorial */</span>
<span class="n">sprintf</span><span class="p">(</span><span class="n">curl_command</span><span class="p">,</span>
<span class="s">"curl -s </span><span class="se">\"</span><span class="s">https://api.github.com/repos/%s/%s/commits</span><span class="se">\"</span><span class="s"> &gt; %s"</span><span class="p">,</span>
<span class="n">username</span><span class="p">,</span> <span class="n">repo</span><span class="p">,</span> <span class="n">output_filename</span><span class="p">);</span>
<span class="n">sprintf</span><span class="p">(</span><span class="n">cleanup_command</span><span class="p">,</span> <span class="s">"rm -f %s"</span><span class="p">,</span> <span class="n">output_filename</span><span class="p">);</span>
<span class="n">system</span><span class="p">(</span><span class="n">curl_command</span><span class="p">);</span>
<span class="cm">/* parsing json and validating output */</span>
<span class="n">root_value</span> <span class="o">=</span> <span class="n">json_parse_file</span><span class="p">(</span><span class="n">output_filename</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">json_value_get_type</span><span class="p">(</span><span class="n">root_value</span><span class="p">)</span> <span class="o">!=</span> <span class="n">JSONArray</span><span class="p">)</span> <span class="p">{</span>
<span class="n">system</span><span class="p">(</span><span class="n">cleanup_command</span><span class="p">);</span>
<span class="k">return</span><span class="p">;</span>
<span class="p">}</span>
<span class="cm">/* getting array from root value and printing commit info */</span>
<span class="n">commits</span> <span class="o">=</span> <span class="n">json_value_get_array</span><span class="p">(</span><span class="n">root_value</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%-10.10s %-10.10s %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="s">"Date"</span><span class="p">,</span> <span class="s">"SHA"</span><span class="p">,</span> <span class="s">"Author"</span><span class="p">);</span>
<span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">json_array_get_count</span><span class="p">(</span><span class="n">commits</span><span class="p">);</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="n">commit</span> <span class="o">=</span> <span class="n">json_array_get_object</span><span class="p">(</span><span class="n">commits</span><span class="p">,</span> <span class="n">i</span><span class="p">);</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"%.10s %.10s %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span>
<span class="n">json_object_dotget_string</span><span class="p">(</span><span class="n">commit</span><span class="p">,</span> <span class="s">"commit.author.date"</span><span class="p">),</span>
<span class="n">json_object_get_string</span><span class="p">(</span><span class="n">commit</span><span class="p">,</span> <span class="s">"sha"</span><span class="p">),</span>
<span class="n">json_object_dotget_string</span><span class="p">(</span><span class="n">commit</span><span class="p">,</span> <span class="s">"commit.author.name"</span><span class="p">));</span>
<span class="p">}</span>
<span class="cm">/* cleanup code */</span>
<span class="n">json_value_free</span><span class="p">(</span><span class="n">root_value</span><span class="p">);</span>
<span class="n">system</span><span class="p">(</span><span class="n">cleanup_command</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Calling <code>print_commits_info("torvalds", "linux");</code> prints: </p>
<pre><code>Date SHA Author
2012-10-15 dd8e8c4a2c David Rientjes
2012-10-15 3ce9e53e78 Michal Marek
2012-10-14 29bb4cc5e0 Randy Dunlap
2012-10-15 325adeb55e Ralf Baechle
2012-10-14 68687c842c Russell King
2012-10-14 ddffeb8c4d Linus Torvalds
...
</code></pre>
<h2>License</h2>
<p><a href="http://opensource.org/licenses/mit-license.php">The MIT License (MIT)</a></p>
</section>
<footer>
parson is maintained by <a href="https://github.com/kgabis">kgabis</a><br>
This page was generated by <a href="http://pages.github.com">GitHub Pages</a>. Tactile theme by <a href="http://twitter.com/jasonlong">Jason Long</a>.
</footer>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-35563760-2");
pageTracker._trackPageview();
} catch(err) {}
</script>
</div>
</div>
</body>
</html>