jq: Liens FFI LuaJIT vers jq
Installation
Si vous n'avez pas configuré l'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-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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-jq v0.2.0 publiée le 06 juin 2025.
lua-resty-jq est un petit wrapper LuaJIT FFI pour jq
Hello World avec lua-resty-jq
-- <example-input> de 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()
L'exécution du code ci-dessus produira (ou quelque chose de similaire) :
[
{
"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()
Alloue un contexte libjq.
teardown
syntax: jq:teardown()
Détruit le contexte libjq, libérant les ressources.
compile
syntax: ok, err = jq:compile(program)
Retourne true si le programme a été compilé, sinon nil et l'erreur
compilation failed.
Notez qu'il n'est actuellement pas possible d'inspecter les détails de l'erreur de compilation.
En cas de doute, essayez votre programme dans le CLI jq.
filter
syntax: res, err = jq:filter(data, options)
Filtre data en utilisant le programme précédemment compilé. La table options peut
contenir des indicateurs qui modifient le comportement du filtre, similaire à un sous-ensemble des
options CLI pour jq :
compact_output: Retourne la sortie sous une forme compacte sans espace supplémentaire, et avec chaque objet JSON sur une seule ligne. Par défaut, c'esttrue. Mettez àfalsepour une sortie "jolie".raw_output: Sortie sous forme de chaînes brutes, pas en JSON cité. Par défaut, c'estfalse.join_output: Commeraw_outputmais en plus ne sort pas de séparateurs de nouvelle ligne. Par défaut, c'estfalse.ascii_output: jq sort généralement les points de code Unicode non-ASCII en UTF-8, même si l'entrée les spécifiait comme séquences d'échappement (comme "\u03bc"). En utilisant cette option, vous pouvez forcer jq à produire une sortie ASCII pure avec chaque caractère non-ASCII remplacé par la séquence d'échappement équivalente. Par défaut, c'estfalse.sort_keys: Sort les champs de chaque objet avec les clés dans un ordre trié. Par défaut, c'estfalse.table_output: Retourne une table de résultats encodés semblable à une séquence au lieu de les concaténer en une seule chaîne. Par défaut, c'estfalse.
De plus, filter() prend une table comme troisième argument optionnel. Lorsqu'elle est fournie, cette table sera utilisée pour stocker les résultats au lieu de créer une nouvelle
table pour chaque appel à filter() :
local buf = {}
local res, err = jq:filter(data, nil, buf)
for _, elem in ipairs(buf) do
-- ...
end
Cela implique options.table_output = true, donc cette option doit être
explicitement définie sur false afin de recevoir un résultat sous forme de chaîne :
local buf = {}
local res, err = jq:filter(data, { table_output = false }, buf)
print(res)
NOTE : filter() ajoute un nil à la fin de la table de sorte que l'opérateur de longueur
(#buf) et ipairs(buf) retournent des résultats précis après exécution, mais
il ne vide pas la table. Les appelants doivent vider la table eux-mêmes si
désiré.
Voir Aussi
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-jq.