Я пытаюсь проанализировать эту полезную нагрузку, используя Python, единый метод, используя, например, _.now (), замена переменных запроса работает нормально, но он сбой, когда используется цепочка метода: т.е. _.dateformat (_. Теперь () , 'Yyyy-mm-dd') или _.adddays (_. Now (), 2) .
it Следует обрабатывать несколько методов: поддерживает несколько вложенных вызовов функций, таких как {{_.dateformat (_. AddDays (_. now (), 2), 'yyyy-mm-dd')}} < /code>
рекурсивное отображение : работает над глубоко вложенными словарями и списками. {{$ req.user.name}} , {{$ req.email}}
он должен иметь возможность обрабатывать системные VAR, такие как {{_.sys_var}} < /p>
{
"Variables": "MY_VAR:MY_VALUE",
"IsActive": true,
"CreatedAt": "2025-02-19T10:52:39.7507357Z",
"Title": "test 2",
"WebhookTrigger": "",
"Id": "c1991231-08fe-4f8d-aee9-a9cddcd4f2a0",
"Requests": [
{
"Id": "1",
"Label": "Webhook Trigger",
"Url": "",
"Method": "POST",
"Headers": null,
"Payload": null,
"Children": [
{
"Id": "1",
"Label": "New Request",
"Url": "https://example.com",
"Method": "POST",
"Headers": "MY-HEADER:{{_.SYSTEM_VAR}}",
"Payload": {
"param1": "{{$req.name}}",
"param2": "{{$req.id}}",
"param3": "{{_.now()}}",
"param4": "{{$req.address.city}}",
"param5": "{{$req.address.country}}",
"param6": "{{$req.address.road.name}}",
"param7": "{{$req.address.road.post.code}}"
},
"Children": [{
"Id": "2",
"Label": "New Request",
"Url": "https://example.com",
"Method": "POST",
"Headers": "MY-HEADER:MY_VALUE",
"Payload": {
"param1": "{{$req.name}}",
"param2": "{{$req.id}}",
"param3": "{{_.now()}}",
"param5": "{{_.dateFormat(_.now(), 'YYYY-DD-MM')}}"
}
}]
}
]
}
]
}
< /code>
Вот код Python: < /p>
import re
from functools import reduce
from datetime import datetime, timedelta
def get_nested_value(data, keys):
try:
return reduce(lambda d, key: d.get(key, '') if isinstance(d, dict) else '', keys, data)
except Exception:
return ''
# Mock system variables and functions
system_vars = {
"now": lambda: datetime.now(),
"dateFormat": lambda dt, fmt: dt.strftime(fmt),
"addDays": lambda dt, days: dt + timedelta(days=int(days))
}
def evaluate_expression(expression, responses, req_vars, system_vars):
def resolve_function_call(match):
try:
func_call = match.group(0)
match_result = re.match(r"(\w+)\((.*?)\)", func_call)
if not match_result:
return ''
func_name, args_str = match_result.groups()
args = []
if args_str:
for arg in args_str.split(','):
arg = arg.strip()
if arg.startswith('_.'):
arg = evaluate_expression(arg, responses, req_vars, system_vars)
elif arg in system_vars:
arg = system_vars[arg]()
args.append(arg)
return str(system_vars[func_name](*args)) if func_name in system_vars else ''
except Exception as e:
return f"[Error: {str(e)}]"
while '(' in expression and ')' in expression:
expression = re.sub(r"(\w+)\((.*?)\)", resolve_function_call, expression)
parts = expression.split('.')
if parts[0] == '_': # System variable
return str(system_vars.get(parts[1], '')) if len(parts) > 1 else ''
elif parts[0] == '$req': # Request variable
return str(get_nested_value(req_vars, parts[1:]) or '')
else: # Response variable
try:
parent_index = int(parts[0]) - 1
response_keys = parts[2:]
return str(get_nested_value(responses[parent_index]['response'].json(), response_keys) or '')
except (IndexError, ValueError):
return ''
return ''
def replace_placeholders(value, responses, req_vars, system_vars):
def resolve(match):
expr = match.group(1).strip()
return str(evaluate_expression(expr, responses, req_vars, system_vars)) if expr else ''
if isinstance(value, str):
while '{{' in value and '}}' in value:
value = re.sub(r'\{\{(.*?)\}\}', resolve, value)
elif isinstance(value, dict):
return {k: replace_placeholders(v, responses, req_vars, system_vars) for k, v in value.items()}
elif isinstance(value, list):
return [replace_placeholders(v, responses, req_vars, system_vars) for v in value]
return value
Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-python
Преобразовать полезную нагрузку в Python ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как получить полезную нагрузку сообщения при обработке исключений @SqsListener
Anonymous » » в форуме JAVA - 0 Ответы
- 52 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как отправить полезную нагрузку в API контроллера из перехватчика после ее расшифровки
Anonymous » » в форуме JAVA - 0 Ответы
- 59 Просмотры
-
Последнее сообщение Anonymous
-