Модуль ngx_http_json_module

Пример конфигурации
Директивы
     json_max_depth
     json_set

Модуль ngx_http_json_module (1.31.5) извлекает значения из документа JSON, находящегося в переменной, и делает их доступными в виде переменных.

Документ разбирается только один раз за запрос, независимо от того, сколько переменных из него извлекается. Разбор выполняется при первом обращении к любой из этих переменных.

По умолчанию этот модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра --with-http_json_module.

Пример конфигурации

http {
    json_set $user_name $arg_data user.name;
    json_set $user_age  $arg_data user.age;
    json_set $tag0      $arg_data tags[0];

    server {
        listen 8080;

        location / {
            return 200 "name=$user_name age=$user_age tag0=$tag0\n";
        }
    }
}

Директивы

Синтаксис: json_max_depth число;
Умолчание:
json_max_depth 32;
Контекст: http

Задаёт максимальную глубину вложенности документов JSON. Документ с более глубокой вложенностью считается некорректным. Допустимые значения находятся в диапазоне от 1 до 256.

Синтаксис: json_set $переменная $источник путь;
Умолчание:
Контекст: http

Устанавливает переменную в значение, которое извлекается по заданному пути из документа JSON, находящегося в переменной источник.

В пути члены объекта разделяются точкой, а элементы массива задаются индексом в квадратных скобках, начинающимся с нуля:

client_body_early_read on;

json_set $req_id     $request_body request.id;
json_set $enabled    $request_body settings.enabled;
json_set $first_item $request_body items[0];

Имя члена, которое является пустым или содержит “.”, “[” или “]”, записывается в квадратных скобках в виде строки JSON. Так как такой путь содержит двойные кавычки, весь параметр нужно взять в кавычки в конфигурационном файле:

json_set $domain $request_body '["a.b.com"]';
json_set $nested $request_body 'obj["a.b"].c[2]';

Значение строки JSON сохраняется без экранирования. Значения чисел, логических значений и null сохраняются в том виде, в котором они присутствуют в документе. Если путь указывает на объект или массив, то сохраняется весь его текст, включая объемлющие фигурные или квадратные скобки.

Если указанный член или элемент отсутствует, то переменная не найдена. Если переменная источник пустая или не найдена, либо её значение не является корректным полным документом JSON, то все переменные, извлекаемые из этого источника, не найдены.