summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/json4lua/doc/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/json4lua/doc/index.html')
-rw-r--r--Data/BuiltIn/Libraries/json4lua/doc/index.html394
1 files changed, 394 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/json4lua/doc/index.html b/Data/BuiltIn/Libraries/json4lua/doc/index.html
new file mode 100644
index 0000000..12ec6c7
--- /dev/null
+++ b/Data/BuiltIn/Libraries/json4lua/doc/index.html
@@ -0,0 +1,394 @@
+<html>
+<head>
+<title>JSON4Lua and JSONRPC4Lua</title>
+<style type="text/css">
+body {
+ font-family: Arial, Helvetica, Geneva;
+ font-size: 10pt;
+}
+
+.copyright {
+ color: #999999;
+ font-size: 8pt;
+ text-align:center;
+}
+
+.navBar {
+ border-left: 1px solid lightgray;
+ border-right: 1px solid lightgray;
+ border-bottom: 1px solid lightgray;
+ margin-top:5px;
+ margin-bottom: 5px;
+}
+.navBar h1 {
+ background-image: url('pics/lunartone.gif');
+ background-color: #e0c088;
+ color: white;
+ font-size: 9pt;
+ margin: 0px;
+ padding: 4px;
+}
+
+.navBar .navItem a {
+ color: #999999;
+ font-size: 8pt;
+ padding: 2px 2px 2px 10px;
+ text-decoration:none;
+}
+
+.navBar .navItem a:hover {
+ color: #ff9900;
+ text-decoration: underline;
+}
+
+.titleBar {
+ border-bottom: 2px dotted gray;
+ font-size: 20pt;
+ font-weight: bold;
+ margin-bottom: 15px;
+ width: 100%;
+}
+
+.workArea {
+ border: 1px none lightgray;
+ font-family: Times New Roman;
+ padding: 8px;
+ padding-left: 15px;
+}
+
+.workArea a {
+ font-weight: bold;
+ text-decoration: none;
+}
+
+.workArea a:hover {
+ color: #ff9900;
+ text-decoration: underline;
+}
+
+.workArea .downloadTable {
+ border: 1px solid lightgray;
+ padding: 0px;
+ margin: 0px;
+}
+
+.workArea .downloadTable * th {
+ background-color: #e0c088;
+ background-image: url('pics/lunartone.gif');
+ color: white;
+}
+
+.workArea .downloadTable * tr {
+ border: 1px solid lightgray;
+}
+
+.workArea .downloadTable * td {
+ vertical-align: top;
+}
+
+.workArea * dt {
+ font-size: 12pt;
+ margin-top: 10px;
+}
+
+.workArea * .example {
+ background-color: #ffffcc;
+ border: 1px dashed lightgray;
+ padding: 10px;
+}
+
+.workArea h1 {
+ font-size: 16pt;
+ font-weight: bold;
+}
+
+.workArea h2 {
+ font-size: 14pt;
+ font-weight: normal;
+ color: gray;
+}
+
+</style>
+<body>
+<table border="0">
+ <tr>
+ <td valign="top">
+ <img src="pics/json4lua.gif"><p/>
+ <!-- NAVIGATION BARS -->
+
+ <div class="navBar">
+ <h1>This Page</h1>
+ <div class="navItem"><a href="#news">Latest News</a></div>
+ <div class="navItem"><a href="#introduction">Introduction</a></div>
+ <div class="navItem"><a href="#licence">Licence</a></div>
+ <div class="navItem"><a href="#requirements">Requirements</a></div>
+ <div class="navItem"><a href="#download">Download</a></div>
+ <div class="navItem"><a href="#installation">Installation</a></div>
+ <div class="navItem"><a href="#usage">Usage &amp; Reference</a>
+ <div class="navItem" style="margin-left: 4px"><a href="#json_decode">decode</a></div>
+ <div class="navItem" style="margin-left: 4px"><a href="#json_encode">encode</a></div>
+ <div class="navItem" style="margin-left: 4px"><a href="#json_null">null</a></div>
+ <div class="navItem" style="margin-left: 4px"><a href="#json_rpc_call">rpc.call</a></div>
+ <div class="navItem" style="margin-left: 4px"><a href="#json_rpc_proxy">rpc.proxy</a></div>
+ <div class="navItem" style="margin-left: 4px"><a href="#json_rpcserver_serve">rpcserver.serve</a></div>
+
+ </div>
+ <div class="navItem"><a href="#roadmap">History &amp; Roadmap</a></div>
+ </div> <!-- end of navigation bar: This Site -->
+
+ <div class="navBar">
+ <h1>json.luaforge</h1>
+ <div class="navItem"><a href="http://luaforge.net/projects/json/">Summary</a></div>
+ <div class="navItem"><a href="http://luaforge.net/forum/?group_id=143">Forums</a></div>
+ <div class="navItem"><a href="http://luaforge.net/tracker/?group_id=143">Tracker</a></div>
+ <div class="navItem"><a href="http://luaforge.net/news/?group_id=143">News</a></div>
+ <!--<div class="navItem"><a href="http://luaforge.net/scm/?group_id=143">CVS</a></div>-->
+ <div class="navItem"><a href="http://luaforge.net/frs/?group_id=143">Files</a></div>
+ </div> <!-- end of navigation bar: json.luaforge -->
+
+ <div class="navBar">
+ <h1>Lua</h1>
+ <div class="navItem"><a href="http://www.lua.org/">Lua</a></div>
+ <div class="navItem"><a href="http://www.luaforge.net/">Lua Forge</a></div>
+ <div class="navItem"><a href="http://www.keplerproject.org/cgilua/">CGI Lua</a></div>
+ <div class="navItem"><a href="http://www.keplerproject.org/compat/">Lua compat-5.1</a></div>
+ <div class="navItem"><a href="http://www.cs.princeton.edu/~diego/professional/luasocket/">Lua Socket 2.0</a></div>
+ <div class="navItem"><a href="http://www.keplerproject.org/xavante/">Xavante</a></div>
+ </div> <!-- end of navigation bar: Lua Resources -->
+
+ <div class="navBar">
+ <h1>JSON</h1>
+ <div class="navItem"><a href="http://www.json.org/">json.org</a></div>
+ <div class="navItem"><a href="http://www.json-rpc.org/">json-rpc.org</a></div>
+ </div> <!-- end of navigation bar: Lua Resources -->
+
+ </td>
+ <!-- MAIN WORK AREA -->
+ <td valign="top" class="workArea">
+ <div class="titleBar">JSON4Lua and JSONRPC4Lua</div>
+ <!-- ***************** LATEST NEWS ***************** -->
+ <h1><a name="news"></a>Latest News</h1>
+ <p><small>(2009-08-06)</small> We've changed the JSON4Lua and JSONRPC4Lua licence from the GPL to the MIT licence, like Lua itself.</p>
+ <p>
+ The 0.9.20 release fixes a bug in Lua 5.1 operation, introduces a <a href="#json_null"><code>json.null</code></a> value to force null values in JSON encodings, improves performance (over 50% faster on some tests), and permits <code>/* comments */</code> in the JSON string being decoded.
+ </p>
+
+ <!-- ***************** INTRODUCTION ***************** -->
+ <h1><a name="introduction"></a>Introduction</h1>
+ JSON4Lua and JSONRPC4Lua implement <a href="http://www.json.org">JSON (JavaScript Object Notation)</a> encoding and decoding and a <a href="http://www.json-rpc.org/">JSON-RPC-over-http</a> client for <a href="http://www.lua.org/">Lua</a>.<p/>
+
+JSON is JavaScript Object Notation, a simple encoding of Javascript-like objects that is ideal for lightweight transmission of relatively weakly-typed data.
+A sub-package of JSON4Lua is JSONRPC4Lua, which provides a simple JSON-RPC-over-http client and server (in a CGILua environment) for Lua. Please seen the documentation below for JSONRPC4Lua.
+
+ <!-- ***************** LICENCE ***************** -->
+ <h1><a name="licence"></a>Licence</h1>
+ JSON4Lua is licensed under the MIT Consortium licence like Lua itself. Please see <a href="LICENCE.txt">LICENCE.txt</a> for details.<p/>
+
+ <!-- ***************** REQUIREMENTS ***************** -->
+ <a name="requirements"></a><h1>Requirements</h1>
+ JSON4Lua is a pure-Lua module that is Lua 5.0 compatible (if you have <a href="http://www.keplerproject.org/compat/">compat-5.1</a> for Lua 5.0). JSON4Lua also works (perfectly, I hope) under Lua 5.1, which is where I largely use it nowadays. Since Lua is platform independent, so is JSON4Lua.<p/>
+
+ The JSON4RPC sub-module requires <a href="http://www.cs.princeton.edu/~diego/professional/luasocket/">Lua Socket 2.0</a>. It uses <code>socket.http</code> for for the RPC over http connection. Socket 2.0 includes <code>ltn12</code>, which is also used by JSON4RPC.<p />
+
+ To use <code>json.rpcserver</code> you need a <a href="http://www.keplerproject.org/cgilua/">CGILua</a> enabled webserver. However, a quick <a href="cgilua_patch.html">patch</a> is required in CGILua 5.0 to support JSON-RPC.
+
+ <!-- ***************** START OF DOWNLOAD SECTION ***************** -->
+ <h1><a name="download"></a>Download</h1>
+ JSON4Lua is hosted on <a href="http://www.luaforge.net">LuaForge</a>.
+ <table cols="2" class="downloadTable">
+ <tr><th>Version</th><th>Date</th><th>Notes</th></tr>
+ <tr><td><a href="http://luaforge.net/frs/?group_id=143">0.9.30</a></td><td>6 August 2009</td><td>
+ Changed to MIT Licence.
+ </td></tr>
+ <tr><td><a href="http://luaforge.net/frs/?group_id=143">0.9.20</a></td><td>4 January 2006</td><td>
+ Introduction of local Lua functions for private functions (removed _ function prefix). <br />
+ Fixed Lua 5.1 compatibility issues.<br />
+ Introduced <code>json.null</code> to have null values in associative arrays.<br />
+ Performance improvement (more than 50% on some tests) through <code>table.concat</code> rather than <code>..</code> operator.<br/>
+ <code>json.decode</code> now ignores <code>/* */</code> comments in the JSON string.<br />
+ </td></tr>
+ <tr><td><a href="http://luaforge.net/frs/?group_id=143">0.9.10</a></td><td>20 December 2005</td><td>
+ Fixes bug with array representation when nil / null values occur in the array.<br />
+ Adds content-type header of <code>text/plain</code> to JSON RPC http requests.<br />
+ Introduces <code>json.rpcserver</code> module with simple JSON RPC enablement for Lua objects.<br />
+ Moved the <code>json.lua</code> file into the <code>json</code> directory. Ensure, therefore, that your <code>LUA_PATH</code> contains a module-finding form like <code>LUA_PATH = c:\proj\lua\?\?.lua;?.lua</code>.<br/>
+ </td></tr>
+ <tr>
+ <td><a href="http://luaforge.net/frs/?group_id=143">0.9.01</a></td>
+ <td>19 December 2005</td>
+ <td>Minor corrections to documentation.</td>
+ </tr>
+ <tr>
+ <td><a href="http://luaforge.net/frs/?group_id=143">0.9.00</a></td>
+ <td>19 December 2005</td>
+ <td>First release</td>
+ </tr>
+ </table>
+ <!-- END OF DOWNLOAD SECTION -->
+
+ <!-- ***************** START OF INSTALLATION SECTION ***************** -->
+ <h1><a name="installation"></a>Installation</h1>
+ As of version 0.9.10, all the JSON4Lua files are contained in the <code>json</code> subdirectory in the distribution zip.<p />
+ Simply copy the <code>json</code> subdirectory so that it is in your Lua path.<p />
+ Ensure that your <code>LUA_PATH</code> variable permits module resolution of the form <code>?/?.lua</code>.<p />
+ <b>Example</b>
+ <div class="example">
+ </div>
+ <h2>Using Windows</h2>
+ Under Windows, set your Lua path as (my Lua installation is in <code>c:\proj\lua\</code>): <p/>
+ <code>
+ set LUA_PATH=c:\proj\lua\?.lua;c:\proj\lua\?\?.lua;?.lua
+ </code><p/>
+ For compat-5.1.lua to start when Lua starts (if you're using Lua 5.0), you also need:<p/>
+ <code>
+ set LUA_INIT=@c:\proj\lua\compat-5.1.lua
+ </code><p />
+ You probably also want to set your library path:<p/>
+ <code>set LUA_CPATH=c:\proj\lua\lib\?.dll;?.dll</code>
+
+ <!------------------------ USAGE AND REFERENCE -------------------->
+ <h1><a name="usage"></a>Usage &amp; Reference</h1>
+ The following functions in <b>JSON4Lua</b> and <b>JSONRPC4Lua</b> are of interest:<p />
+ <dl>
+ <dt><a name="json_encode"></a><code>string <b>json.encode</b>( lua_object )</code></dt>
+ <dd>Returns the Lua object JSON encoded into a string.<p/>
+ <b>Example</b>
+ <div class="example">
+ <code>
+ json = require("json")<br/>
+ print (json.encode( { 1, 2, 'fred', {first='mars',second='venus',third='earth'} } ))
+ </code><p/>
+ prints<p/><code> [1,2,"fred", {"first":"mars","second":"venus","third","earth"}]</code>
+ </div>
+
+ </dd>
+ <dt><a name="json_decode"></a><code>lua_object <b>json.decode</b>( json_string )</code></dt>
+ <dd>Decodes the JSON encoded data structure, and returns a Lua object with the appropriate data.<p/>
+ <b>Example</b>
+
+ <div class="example">
+ <code>
+ json = require("json")<br/>
+
+ testString = [[ { "one":1 , "two":2, "primes":[2,3,5,7] } ]]<br/>
+ o = json.decode(testString)<br/>
+ table.foreach(o,print)<br />
+ print ("Primes are:")<br />
+ table.foreach(o.primes,print)
+ </code><p/>
+ prints:<p/>
+ <pre>
+one 1
+two 2
+primes table: 0032B928
+Primes are:
+1 2
+2 3
+3 5
+4 7</pre>
+ </div></dd>
+
+ <dt><a name="json_null"></a><code><b>json.null</b></code></dt>
+ <dd>Returns a unique value that will be encoded as a <code>null</code> in a JSON encoding.
+ <p>This is necessary in one situation. In Lua, if a key in a table has a <code>nil</code> value, the key is simply discarded (since any non-existent key has a nil value). The encoding of arrays has been built to manage this nil-values in arrays, but associative arrays provide a problem. Consider:
+ <div class="example"><pre>t = { user="test", password=nil }</pre></div>
+ Since Lua simply discards the <code>password</code> key, JSON4Lua encodes this as the JSON string
+ <div class="example"><pre>{"user":"test"}</pre></div>
+ If, for some reason, your JSON RPC Server requires a defined <code>null</code> value, use the following code:
+ <div class="example"><pre>t = { user="test", password=json.null }</pre></div>
+ This will now correctly encode to:
+ <div class="example"><pre>{"user":"test","password":null}</pre></div>
+ Incidentally, <code>json.null</code> is simply a function that returns itself, so that you can use either <code>json.null</code> or <code>json.null()</code> as you fancy.
+ </dd>
+
+
+ <dt><a name="json_rpc_call"></a><code>result, error <b>json.rpc.call</b> ( url, method, ...)</code></dt>
+ <dd>Calls the named method on the given url with the arg parameters. Returns the result and the error. If <code>error</code> is <code>nil</code>, no error occurred.<p/>
+ <b>Example</b>
+ <div class="example">
+ <pre>require ("json.rpc")
+result, error = json.rpc.call("http://jsolait.net/testj.py","echo","Test echo!")
+print(result)</pre>
+ <p />prints<p />
+ <pre>Test echo!</pre>
+ </div>
+ </dd>
+ <dt><a name="json_rpc_proxy"></a><code>proxyServer = <b>json.rpc.proxy</b> (url)</code></dt>
+ <dd>Creates a proxy server object on which JSON-RPC calls can be made. Each call will return the <code>result, error</code>. If <code>error</code> is <code>nil</code>, no error occurred.<p/>
+ <b>Example</b>
+ <div class="example">
+ <pre>
+require ("json.rpc")
+server = json.rpc.proxy("http://jsolait.net/testj.py")
+result, error = server.echo('Test echo!')
+print(result)</pre>
+ <p />prints<p />
+ <pre>Test echo!</pre>
+ </div>
+ </dd>
+
+ <dt><a name="json_rpcserver_serve"></a><code><b>json.rpcserver.serve</b>(object[, packReturn])</code></dt>
+ <dd>
+ Handles an incoming CGILua request as a JSON RPC request and serves the request from
+ the given object.
+ <p />The optional <code>packReturn</code> parameter, if set <code>true</code>, will, if the requested
+ method returns more than one value, pack these returned values into an array. If only a single value
+ is returned, it is not packed into an array. If <code>packReturn</code> is <code>false</code> (or not set), only the first
+ return value from the requested method will be returned. This is necessitated since the JSON protocol does not permit a method call to return more than a single value.
+ <p/>
+
+ <code>serve</code> returns nothing.<p/>
+
+ <b>Example</b>
+ <div class="example">
+ <pre>
+--
+-- jsonrpc.lua
+-- Installed in a CGILua webserver environment (with necessary CGI Lua 5.0 patch)
+--
+require ('json.rpcserver')
+
+-- The Lua class that is to serve JSON RPC requests
+local myServer = {
+ echo = function (msg) return msg end,
+ average = function(...)
+ local total=0
+ local count=0
+ for i=1, table.getn(arg) do
+ total = total + arg[i]
+ count = count + 1
+ end
+ return { average= total/count, sum = total, n=count }
+ end
+}
+
+json.rpcserver.serve(myServer)
+</pre>
+An example of using this JSON RPC server from a Lua file:
+<pre>
+require ('json.rpc')
+local server = json.rpc.proxy('http://www.myserver.com/jsonrpc.lua')
+table.foreach(server.average(10,15,23), print)
+</pre>
+Prints:
+<pre>
+average 16
+sum 48
+n 3
+</pre>
+ </div>
+
+ </dd>
+ </dl>
+
+ <!-- ***************** HISTORY AND ROADMAP ***************** -->
+ <h1><a name="roadmap"></a>History &amp; Roadmap</h1>
+ The downloads sections details the versions and their related histories. I will wait for Lua 5.1 to be final (expected late January) before making the JSON4Lua module beta. If no serious bugs or objections are encountered, I will make the module 1.0 on 1 April 2006 (to coincide with April Fool's day!)
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="copyright">&copy; 2005, 2006 Craig Mason-Jones</td>
+ </tr>
+</table>
+</body>
+</html> \ No newline at end of file