jq: LuaJIT FFI-Bindings für jq
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-jq
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-jq
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-jq v0.2.0, das am 06. Juni 2025 veröffentlicht wurde.
lua-resty-jq ist ein kleiner LuaJIT FFI-Wrap für jq
Hello World mit lua-resty-jq
-- <example-input> von https://api.github.com/repos/stedolan/jq/commits?per_page=5
local jq = require "resty.jq".new()
jq:compile("[ .[] | {message: .commit.message, name: .commit.committer.name} ]")
local output = jq:filter(<example-input>)
print(output)
jq:teardown()
Das Ausführen des obigen Codes wird Folgendes ausgeben (oder Ähnliches):
[
{
"message": "Add some missing code quoting to the manual",
"name": "William Langford"
},
{
"message": "Reduce allocation on string multiplication",
"name": "William Langford"
},
{
"message": "Fix multiple string multiplication",
"name": "William Langford"
},
{
"message": "Fix error handling in strftime",
"name": "William Langford"
},
{
"message": "Makefile: prepend srcdir to jq.1.prebuilt to fix out of source compilation",
"name": "William Langford"
}
]
new
syntax: jq, err = require("resty.jq").new()
Allokiert einen libjq-Kontext.
teardown
syntax: jq:teardown()
Zerstört den libjq-Kontext und gibt Ressourcen frei.
compile
syntax: ok, err = jq:compile(program)
Gibt true zurück, wenn das Programm kompiliert wurde, andernfalls nil und den Fehler compilation failed.
Beachten Sie, dass es derzeit nicht möglich ist, Details des Kompilierungsfehlers zu inspizieren. Im Zweifelsfall versuchen Sie Ihr Programm in der CLI jq.
filter
syntax: res, err = jq:filter(data, options)
Filtert data mit dem zuvor kompilierten Programm. Die options-Tabelle kann Flags enthalten, die das Verhalten des Filters ändern, ähnlich einem Teil der CLI-Optionen für jq:
compact_output: Gibt die Ausgabe in einer kompakten Form ohne zusätzliche Abstände zurück, wobei jedes JSON-Objekt in einer einzigen Zeile steht. Standardmäßig auftrue. Setzen Sie es auffalsefür "schöne" Ausgabe.raw_output: Gibt als rohe Strings aus, nicht als JSON-quoted. Standard istfalse.join_output: Wieraw_output, aber zusätzlich werden keine Zeilenumbrüche ausgegeben. Standard istfalse.ascii_output: jq gibt normalerweise nicht-ASCII Unicode-Codepunkte als UTF-8 aus, selbst wenn die Eingabe sie als Escape-Sequenzen angegeben hat (wie "\u03bc"). Mit dieser Option können Sie jq zwingen, reine ASCII-Ausgaben zu erzeugen, wobei jedes nicht-ASCII-Zeichen durch die entsprechende Escape-Sequenz ersetzt wird. Standard istfalse.sort_keys: Gibt die Felder jedes Objekts mit den Schlüsseln in sortierter Reihenfolge aus. Standard istfalse.table_output: Gibt eine sequenzähnliche Tabelle der kodierten Ergebnisse zurück, anstatt sie in einen einzelnen String zu verketten. Standard istfalse.
Zusätzlich akzeptiert filter() eine Tabelle als optionales 3. Argument. Wenn angegeben, wird diese Tabelle verwendet, um Ergebnisse zu speichern, anstatt für jeden Aufruf von filter() eine neue Tabelle zu erstellen:
local buf = {}
local res, err = jq:filter(data, nil, buf)
for _, elem in ipairs(buf) do
-- ...
end
Dies impliziert options.table_output = true, sodass diese Option ausdrücklich auf false gesetzt werden muss, um ein String-Ergebnis zu erhalten:
local buf = {}
local res, err = jq:filter(data, { table_output = false }, buf)
print(res)
HINWEIS: filter() fügt der Tabelle ein nachfolgendes nil hinzu, sodass der Längenoperator (#buf) und ipairs(buf) nach der Ausführung genaue Ergebnisse zurückgeben, aber es leert die Tabelle nicht. Aufrufer müssen die Tabelle selbst leeren, wenn gewünscht.
Siehe auch
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-jq.