libcjson: bibliothèque cJSON basée sur FFI de LuaJIT pour nginx-module-lua
Installation
Si vous n'avez pas configuré d'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-libcjson
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-libcjson
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-libcjson v1.4 publié le 04 juillet 2016.
lua-resty-libcjson est une bibliothèque cJSON basée sur FFI de LuaJIT (testée également avec OpenResty).
API Lua
mixed json.decode(value)
Décode une valeur ou une structure JSON (tableau ou objet JSON), et retourne soit une table Lua soit une valeur simple (par exemple boolean, string, number, nil ou json.null (lorsqu'il est exécuté dans le contexte d'OpenResty, json.null est identique à ngx.null).
Exemple
local json = require "resty.libcjson"
local obj = json.decode "{}" -- table (avec obj.__jsontype == "object")
local arr = json.decode "[]" -- table (avec arr.__jsontype == "array")
local nbr = json.decode "1" -- 1
local bln = json.decode "true" -- true
local str = json.decode '"test"' -- "test"
local str = json.decode '""' -- ""
local num = json.decode(5) -- 5
local num = json.decode(math) -- math
local num = json.decode(json.null) -- json.null
local nul = json.decode "null" -- json.null
local nul = json.decode "" -- nil
local nul = json.decode(nil) -- nil
local nul = json.decode() -- nil
Les structures JSON imbriquées sont analysées comme des tables Lua imbriquées.
string json.encode(value, formatted)
Encode une valeur ou une table Lua, et retourne la valeur ou la structure JSON équivalente sous forme de chaîne. En option, vous pouvez passer l'argument formatted avec la valeur false pour obtenir une chaîne JSON non formatée en sortie.
Exemple
local json = require "resty.libcjson"
local str = json.encode{} -- "[]"
local str = json.encode(setmetatable({}, json.object)) -- "{}"
local str = json.encode(1) -- "1"
local str = json.encode(1.1) -- "1.100000"
local str = json.encode "test" -- '"test"'
local str = json.encode "" -- '""'
local str = json.encode(false) -- "false"
local str = json.encode(nil) -- "null"
local str = json.encode(json.null) -- "null"
local str = json.encode() -- "null"
local str = json.encode{ a = "b" } -- '{ "a": "b" }'
local str = json.encode{ "a", b = 1 } -- '{ "1": "a", "b": 1 }'
local str = json.encode{ 1, 1.1, "a", "", false } -- '[1, 1.100000, "a", "", false]'
Les tables Lua imbriquées sont encodées comme des structures JSON imbriquées (objets ou tableaux JSON).
À propos de l'encodage et du décodage des tableaux et objets JSON
Voir ce commentaire : https://github.com/bungle/lua-resty-libcjson/issues/1#issuecomment-38567447.
Benchmarks
Environ 190 Mo citylots.json :
## Lua cJSON
Temps de décodage : 5.882825
Temps d'encodage : 4.902301
## lua-resty-libcjson
Temps de décodage : 6.409872
Temps d'encodage : (prend une éternité)
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-libcjson.