147 lines
2.7 KiB
C
147 lines
2.7 KiB
C
/***
|
|
* Manipulation of JavaScript Object Notation
|
|
* (JSON) values.
|
|
*
|
|
* Implementation from
|
|
* [lua-cjson](https://github.com/openresty/lua-cjson),
|
|
* with some additional modifications
|
|
*
|
|
* @module json
|
|
*/
|
|
|
|
#include <lua.h>
|
|
#include <lauxlib.h>
|
|
|
|
#include "lcallisto.h"
|
|
|
|
|
|
/***
|
|
* Returns the given Lua table encoded
|
|
* as a JSON object.
|
|
*
|
|
* @function encode
|
|
* @usage
|
|
local t = {
|
|
key = "value",
|
|
x = 4,
|
|
y = 16.789,
|
|
t = {
|
|
hello = "world"
|
|
}
|
|
}
|
|
local j = json.encode(t)
|
|
* @tparam table t The table to encode.
|
|
*/
|
|
|
|
/***
|
|
* Returns the given JSON object decoded
|
|
* into a Lua table.
|
|
*
|
|
* @function decode
|
|
* @usage
|
|
local j = [[
|
|
{
|
|
"key": "value",
|
|
"x": 4,
|
|
"y": 16.789,
|
|
"obj": {
|
|
"hello": "world"
|
|
}
|
|
}
|
|
]]
|
|
local t = json.decode(j)
|
|
* @tparam string j The JSON object to decode.
|
|
*/
|
|
|
|
/***
|
|
* Gets/sets configuration values used when
|
|
* encoding or decoding JSON objects.
|
|
*
|
|
* The *setting* paramater is a string
|
|
* containing either "encode:" or "decode:"
|
|
* followed by the name of the setting.
|
|
* Settings can be found in the
|
|
* [Settings](#Settings) section.
|
|
*
|
|
* @function config
|
|
* @tparam string setting The setting to get/set.
|
|
* @param ...
|
|
*/
|
|
|
|
/***
|
|
* Creates and returns a new independent copy of the
|
|
* module, with default settings and a separate
|
|
* persistent encoding buffer.
|
|
*
|
|
* @function new
|
|
*/
|
|
|
|
/***
|
|
* The name of the module, provided for
|
|
* compatibility with lua-cjson.
|
|
* Normally this will just be *"json"*.
|
|
*
|
|
* @field _NAME
|
|
*/
|
|
|
|
/***
|
|
* The version of lua-cjson
|
|
* used in the library.
|
|
*
|
|
* @field _VERSION
|
|
*/
|
|
|
|
/***
|
|
* Configures handling of extremely sparse arrays.
|
|
*
|
|
* **Parameters:**
|
|
*
|
|
* @setting encode:sparse-array
|
|
* @tparam integer safe Always use an array when
|
|
* the max index is larger than this value.
|
|
* @tparam boolean convert Whether or not to convert
|
|
* extremely sparse arrays into objects.
|
|
* @tparam integer ration *0*: always allow sparse;
|
|
* *1*: never allow sparse; *>1*: use ratio
|
|
*/
|
|
/***
|
|
* Configures the maximum number of nested
|
|
* arrays/objects allowed when encoding.
|
|
*
|
|
* **Parameters:**
|
|
*
|
|
* @setting encode:max-depth
|
|
* @tparam integer depth Max depth allowed.
|
|
*/
|
|
/***
|
|
* Configures the maximum number of nested
|
|
* arrays/objects allowed when decoding.
|
|
*
|
|
* **Parameters:**
|
|
*
|
|
* @setting decode:max-depth
|
|
* @tparam integer depth Max depth allowed.
|
|
*/
|
|
/***
|
|
* Configures the amount of significant
|
|
* digits returned when encoding numbers.
|
|
* This can be used to balance accuracy
|
|
* versus performance.
|
|
*
|
|
* **Parameters:**
|
|
*
|
|
* @setting encode:number-precision
|
|
* @tparam integer precision Amount of significant
|
|
* digits to return in floating-point numbers (must
|
|
* be between 1 and 14, default 14)
|
|
*/
|
|
|
|
|
|
int luaopen_cjson(lua_State *L);
|
|
|
|
int
|
|
luaopen_json(lua_State *L)
|
|
{
|
|
luaopen_cjson(L);
|
|
return 1;
|
|
}
|