diff options
Diffstat (limited to 'yajl-1.0.12/index.html')
-rw-r--r-- | yajl-1.0.12/index.html | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/yajl-1.0.12/index.html b/yajl-1.0.12/index.html new file mode 100644 index 0000000..92aec78 --- /dev/null +++ b/yajl-1.0.12/index.html @@ -0,0 +1,227 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<title>YAJL: Yet Another JSON Library (YAJL)</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<link href="doxygen.css" rel="stylesheet" type="text/css"/> +</head> +<body> +<!-- Generated by Doxygen 1.7.4 --> +<div id="top"> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td style="padding-left: 0.5em;"> + <div id="projectname">YAJL <span id="projectnumber">1.0.12</span></div> + </td> + </tr> + </tbody> +</table> +</div> + <div id="navrow1" class="tabs"> + <ul class="tablist"> + <li class="current"><a href="index.html"><span>Main Page</span></a></li> + <li><a href="annotated.html"><span>Data Structures</span></a></li> + <li><a href="files.html"><span>Files</span></a></li> + </ul> + </div> +</div> +<div class="header"> + <div class="headertitle"> +<div class="title">Yet Another JSON Library (YAJL) </div> </div> +</div> +<div class="contents"> +<div class="textblock"><dl class="author"><dt><b>Author:</b></dt><dd>Lloyd Hilaiel </dd></dl> +<dl class="date"><dt><b>Date:</b></dt><dd>2010</dd></dl> +<p>Yet Another JSON Library (YAJL) is a small event-driven (SAX-style) JSON parser written in ANSI C, and a small validating JSON generator. YAJL is released under the BSD license.</p> +<h2><a class="anchor" id="features"></a> +Features</h2> +<ol type="1"> +<li>Stream (incremental) parsing and generation of JSON</li> +<li>ANSI C</li> +<li>Human readable error messages with context</li> +<li>tiny</li> +<li>event driven</li> +<li>support for generating "beautified" JSON</li> +</ol> +<h2><a class="anchor" id="usage"></a> +Usage</h2> +<p>The following code sample is a complete JSON "reformating" program. It demonstrates how to perform stream parsing and generation.</p> +<div class="fragment"><pre class="fragment"><span class="preprocessor">#include <yajl/yajl_parse.h></span> +<span class="preprocessor">#include <yajl/yajl_gen.h></span> + +<span class="preprocessor">#include <stdio.h></span> +<span class="preprocessor">#include <stdlib.h></span> +<span class="preprocessor">#include <string.h></span> + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_null(<span class="keywordtype">void</span> * ctx) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#a33ad490ddf9372c0d27d4c32b4b693d2">yajl_gen_null</a>(g); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_boolean(<span class="keywordtype">void</span> * ctx, <span class="keywordtype">int</span> <span class="keywordtype">boolean</span>) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#a9b761fd105b212682de291ca70836f93">yajl_gen_bool</a>(g, <span class="keywordtype">boolean</span>); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_number(<span class="keywordtype">void</span> * ctx, <span class="keyword">const</span> <span class="keywordtype">char</span> * s, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> l) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#acc239456e918c2bba77ebbcc11246da4">yajl_gen_number</a>(g, s, l); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_string(<span class="keywordtype">void</span> * ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * stringVal, + <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stringLen) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#aae28972365346706ca1d25f2b0677f2b">yajl_gen_string</a>(g, stringVal, stringLen); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_map_key(<span class="keywordtype">void</span> * ctx, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * stringVal, + <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> stringLen) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#aae28972365346706ca1d25f2b0677f2b">yajl_gen_string</a>(g, stringVal, stringLen); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_start_map(<span class="keywordtype">void</span> * ctx) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#aaaefb19b3b2c96b0d3d0bbf3bc4886b2">yajl_gen_map_open</a>(g); + <span class="keywordflow">return</span> 1; +} + + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_end_map(<span class="keywordtype">void</span> * ctx) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#af75cd0ee728dbd835bbbefbcdc923dbe">yajl_gen_map_close</a>(g); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_start_array(<span class="keywordtype">void</span> * ctx) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#a68f7bc4fbfe8015f590bc284d386bf44">yajl_gen_array_open</a>(g); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <span class="keywordtype">int</span> reformat_end_array(<span class="keywordtype">void</span> * ctx) +{ + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g = (<a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a>) ctx; + <a class="code" href="yajl__gen_8h.html#ae3ba7ebfbea5a27f30f4c6c62ddc493b">yajl_gen_array_close</a>(g); + <span class="keywordflow">return</span> 1; +} + +<span class="keyword">static</span> <a class="code" href="structyajl__callbacks.html">yajl_callbacks</a> callbacks = { + reformat_null, + reformat_boolean, + NULL, + NULL, + reformat_number, + reformat_string, + reformat_start_map, + reformat_map_key, + reformat_end_map, + reformat_start_array, + reformat_end_array +}; + +<span class="keyword">static</span> <span class="keywordtype">void</span> +usage(<span class="keyword">const</span> <span class="keywordtype">char</span> * progname) +{ + fprintf(stderr, <span class="stringliteral">"usage: %s <filename>\n"</span> + <span class="stringliteral">" -m minimize json rather than beautify (default)\n"</span> + <span class="stringliteral">" -u allow invalid UTF8 inside strings during parsing\n"</span>, + progname); + exit(1); + +} + +<span class="keywordtype">int</span> +main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> ** argv) +{ + <a class="code" href="yajl__parse_8h.html#acb85b92f3d7cb6f0743b4e68d0172323">yajl_handle</a> hand; + <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> fileData[65536]; + <span class="comment">/* generator config */</span> + <a class="code" href="structyajl__gen__config.html">yajl_gen_config</a> conf = { 1, <span class="stringliteral">" "</span> }; + <a class="code" href="yajl__gen_8h.html#a497f7224309c1a0118f40c87e3fd3f65">yajl_gen</a> g; + <a class="code" href="yajl__parse_8h.html#a1d2bc7f4962c55436daaba61ffaf1f7d">yajl_status</a> stat; + <span class="keywordtype">size_t</span> rd; + <span class="comment">/* allow comments */</span> + <a class="code" href="structyajl__parser__config.html">yajl_parser_config</a> cfg = { 1, 1 }; + <span class="keywordtype">int</span> done = 0; + + <span class="comment">/* check arguments. We expect exactly one! */</span> + <span class="keywordflow">if</span> (argc == 2) { + <span class="keywordflow">if</span> (!strcmp(<span class="stringliteral">"-m"</span>, argv[1])) { + conf.<a class="code" href="structyajl__gen__config.html#a85437a875ae65161b4f28bac6ff89c99">beautify</a> = 0; + + } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(<span class="stringliteral">"-u"</span>, argv[1])) { + cfg.<a class="code" href="structyajl__parser__config.html#a33f7ab7fb27bf626441f15d649dea5d9">checkUTF8</a> = 0; + } <span class="keywordflow">else</span> { + usage(argv[0]); + } + } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (argc != 1) { + usage(argv[0]); + } + + g = <a class="code" href="yajl__gen_8h.html#a628319aaa1d322ffa97ef5a766303d1b">yajl_gen_alloc</a>(&conf, NULL); + + <span class="comment">/* ok. open file. let's read and parse */</span> + hand = <a class="code" href="yajl__parse_8h.html#ac5b76bd2683e48ea5cb97376a62bba46">yajl_alloc</a>(&callbacks, &cfg, NULL, (<span class="keywordtype">void</span> *) g); + + <span class="keywordflow">while</span> (!done) { + rd = fread((<span class="keywordtype">void</span> *) fileData, 1, <span class="keyword">sizeof</span>(fileData) - 1, stdin); + + <span class="keywordflow">if</span> (rd == 0) { + <span class="keywordflow">if</span> (!feof(stdin)) { + fprintf(stderr, <span class="stringliteral">"error on file read.\n"</span>); + <span class="keywordflow">break</span>; + } + done = 1; + } + fileData[rd] = 0; + + <span class="keywordflow">if</span> (done) + <span class="comment">/* parse any remaining buffered data */</span> + stat = <a class="code" href="yajl__parse_8h.html#acb0e5421a4bc2e9b9626f0514f11547f">yajl_parse_complete</a>(hand); + <span class="keywordflow">else</span> + <span class="comment">/* read file data, pass to parser */</span> + stat = <a class="code" href="yajl__parse_8h.html#a6c05371a1532ade860db8b1ef8d31a61">yajl_parse</a>(hand, fileData, rd); + + <span class="keywordflow">if</span> (stat != <a class="code" href="yajl__parse_8h.html#a1d2bc7f4962c55436daaba61ffaf1f7da67a2a1b5d684de357adb0e1ea444ffd7">yajl_status_ok</a> && + stat != <a class="code" href="yajl__parse_8h.html#a1d2bc7f4962c55436daaba61ffaf1f7da88c7cd7b308d09c32dad74b47b9ae3f4">yajl_status_insufficient_data</a>) + { + <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * str = <a class="code" href="yajl__parse_8h.html#aa4f26259fea6bb058b17828598532198">yajl_get_error</a>(hand, 1, fileData, rd); + fprintf(stderr, (<span class="keyword">const</span> <span class="keywordtype">char</span> *) str); + <a class="code" href="yajl__parse_8h.html#a12b6514e18f78fab0825b71465d511ea">yajl_free_error</a>(hand, str); + } <span class="keywordflow">else</span> { + <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * buf; + <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len; + <a class="code" href="yajl__gen_8h.html#a38ab5597a024b05fb6c6564eaaa192ab">yajl_gen_get_buf</a>(g, &buf, &len); + fwrite(buf, 1, len, stdout); + <a class="code" href="yajl__gen_8h.html#a50116818ab3c0f3116e3baff0db2f4ef">yajl_gen_clear</a>(g); + } + } + + <a class="code" href="yajl__gen_8h.html#a9579c99fb77fb6f607db47de662adc9c">yajl_gen_free</a>(g); + <a class="code" href="yajl__parse_8h.html#a9fc930b29358ec1e04bda35d8b73422e">yajl_free</a>(hand); + + <span class="keywordflow">return</span> 0; +} +</pre></div> </div></div> +<hr class="footer"/><address class="footer"><small>Generated on Mon Apr 25 2011 13:06:32 for YAJL by  +<a href="http://www.doxygen.org/index.html"> +<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address> +</body> +</html> |