This commit is contained in:
litterGuy 2025-03-21 13:44:59 +08:00 committed by GitHub
commit 8d2aa05e42
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 1 deletions

View File

@ -168,6 +168,20 @@ class VariablePool(BaseModel):
segments.append(variable_factory.build_segment(part))
return SegmentGroup(value=segments)
def convert_template_escape(self, template: str, /):
parts = VARIABLE_PATTERN.split(template)
segments = []
for part in filter(lambda x: x, parts):
if "." in part and (variable := self.get(part.split("."))):
if isinstance(variable.value, str):
escape_string = variable.value.replace('"', '\\"').replace('\n', '\\n')
segments.append(variable_factory.build_segment(escape_string))
else:
segments.append(variable)
else:
segments.append(variable_factory.build_segment(part))
return SegmentGroup(value=segments)
def get_file(self, selector: Sequence[str], /) -> FileSegment | None:
segment = self.get(selector)
if isinstance(segment, FileSegment):

View File

@ -173,7 +173,7 @@ class Executor:
case "json":
if len(data) != 1:
raise RequestBodyError("json body type should have exactly one item")
json_string = self.variable_pool.convert_template(data[0].value).text
json_string = self.variable_pool.convert_template_escape(data[0].value).text
try:
json_object = json.loads(json_string, strict=False)
except json.JSONDecodeError as e: