如何使用映射中的 nginx 正则表达式提取 json 中的键值
how to nginx regex in map to extract value of a key in json
我有一个 json 请求正文到达 nginx
{
"studentName": "John",
"studentId": "100",
"narks": "100"
}
我正在使用 NGINX $map 提取 studentName 的值并将其映射到变量。
现在我正在使用手动提取已知值
map $request_body $student_uid {
default "john"
~*"john" "john";
~*"jack" "jack";
~*"jill" "jill";
}
我必须提取学生姓名并存储在 student_uid 值中..这样做的正则表达式是什么?不想为此使用任何额外的 nginx 模块
使用此 map
块从请求正文中提取 studentName
JSON 字段:
map $request_body $student_name {
~\"studentName\"\s*:\s*\"([^\"]*)\" ;
}
如果您想将此与您之前的问题结合起来,您可以链接两个 map
块:
map $request_body $student_name {
~\"studentName\"\s*:\s*\"([^\"]*)\" ;
}
map $student_name $student_status {
Bob special;
Alice special;
John regular;
...
}
更新
如果您的 JSON 字段可以包含屏蔽双引号,例如
{
"studentName": "Mike \"Iron\" Tyson",
"studentId": "100",
"marks": "100"
}
上面的正则表达式只会捕获字段的第一部分(Mike \
对于上面的例子)。要捕获整个字段,您需要更复杂的正则表达式:
map $request_body $student_name {
\"studentName\"\s*:\s*\"((?:[^\\"]|\.)*)\" ;
}
我有一个 json 请求正文到达 nginx
{
"studentName": "John",
"studentId": "100",
"narks": "100"
}
我正在使用 NGINX $map 提取 studentName 的值并将其映射到变量。 现在我正在使用手动提取已知值
map $request_body $student_uid {
default "john"
~*"john" "john";
~*"jack" "jack";
~*"jill" "jill";
}
我必须提取学生姓名并存储在 student_uid 值中..这样做的正则表达式是什么?不想为此使用任何额外的 nginx 模块
使用此 map
块从请求正文中提取 studentName
JSON 字段:
map $request_body $student_name {
~\"studentName\"\s*:\s*\"([^\"]*)\" ;
}
如果您想将此与您之前的问题结合起来,您可以链接两个 map
块:
map $request_body $student_name {
~\"studentName\"\s*:\s*\"([^\"]*)\" ;
}
map $student_name $student_status {
Bob special;
Alice special;
John regular;
...
}
更新
如果您的 JSON 字段可以包含屏蔽双引号,例如
{
"studentName": "Mike \"Iron\" Tyson",
"studentId": "100",
"marks": "100"
}
上面的正则表达式只会捕获字段的第一部分(Mike \
对于上面的例子)。要捕获整个字段,您需要更复杂的正则表达式:
map $request_body $student_name {
\"studentName\"\s*:\s*\"((?:[^\\"]|\.)*)\" ;
}