json.lua
Simply copied from JSON4Lua. This is only the JSON encoding/decoding part, the JSON-RPC client depend on the (missing) LuaSocket HTTP module.
string json.encode( lua_object )
Returns the Lua object JSON encoded into a string.
Example:
json = require("json") print (json.encode( { 1, 2, 'fred', {first='mars',second='venus',third='earth'} } ))
prints
[1,2,"fred", {"first":"mars","second":"venus","third","earth"}]
lua_object json.decode( json_string )
Decodes the JSON encoded data structure, and returns a Lua object with the appropriate data.
Example:
json = require("json") testString = [[ { "one":1 , "two":2, "primes":[2,3,5,7] } ]] o = json.decode(testString) for k,v in pairs (o) do print (k,v) end print ("Primes are:") for i,v in ipairs (o.primes) do print (i,v) end
prints:
one 1 two 2 primes table: 0032B928 Primes are: 1 2 2 3 3 5 4 7
json.null
A unique value that will be encoded as a null in a JSON encoding.
This is necessary in one situation. In Lua, if a key in a table has a nil 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:
t = { user="test", password=nil }
Since Lua simply discards the password key, JSON4Lua encodes this as the JSON string
{"user":"test"}
If, for some reason, your JSON RPC Server requires a defined null value, use the following code:
t = { user="test", password=json.null }
This will now correctly encode to:
{"user":"test","password":null}
Incidentally, json.null is simply a function that returns itself, so that you can use either json.null or json.null() as you fancy.
Note: A JSON null value is decoded as Lua nil, not as json.null.