libcjson: LuaJIT FFI-basierte cJSON-Bibliothek für nginx-module-lua
Installation
Wenn Sie das RPM-Repository-Abonnement noch nicht eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder 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
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-libcjson v1.4, das am 04. Juli 2016 veröffentlicht wurde.
lua-resty-libcjson ist eine LuaJIT FFI-basierte cJSON-Bibliothek (auch mit OpenResty getestet).
Lua API
mixed json.decode(value)
Dekodiert einen JSON-Wert oder eine Struktur (JSON-Array oder -Objekt) und gibt entweder eine Lua table oder einen einfachen Wert zurück (z. B. boolean, string, number, nil oder json.null (wenn im Kontext von OpenResty ausgeführt, ist json.null dasselbe wie ngx.null).
Beispiel
local json = require "resty.libcjson"
local obj = json.decode "{}" -- table (mit obj.__jsontype == "object")
local arr = json.decode "[]" -- table (mit 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
Verschachtelte JSON-Strukturen werden als verschachtelte Lua-Tabellen geparst.
string json.encode(value, formatted)
Kodiert einen Lua-Wert oder eine Tabelle und gibt den entsprechenden JSON-Wert oder die Struktur als Zeichenfolge zurück. Optional können Sie das Argument formatted mit dem Wert false übergeben, um eine unformatierte JSON-Zeichenfolge als Ausgabe zu erhalten.
Beispiel
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]'
Verschachtelte Lua-Tabellen werden als verschachtelte JSON-Strukturen (JSON-Objekte oder -Arrays) kodiert.
Über JSON-Arrays und Objektkodierung und -dekodierung
Siehe diesen Kommentar: https://github.com/bungle/lua-resty-libcjson/issues/1#issuecomment-38567447.
Benchmarks
Über 190 MB citylots.json:
## Lua cJSON
Dekodierungszeit: 5.882825
Kodierungszeit: 4.902301
## lua-resty-libcjson
Dekodierungszeit: 6.409872
Kodierungszeit: (dauert ewig)
GitHub
Zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul finden Sie im GitHub-Repository für nginx-module-libcjson.