|
@@ -19,61 +19,62 @@ class JSONReplaceTool(BuiltinTool):
|
|
|
content = tool_parameters.get('content', '')
|
|
|
if not content:
|
|
|
return self.create_text_message('Invalid parameter content')
|
|
|
-
|
|
|
+
|
|
|
# get query
|
|
|
query = tool_parameters.get('query', '')
|
|
|
if not query:
|
|
|
return self.create_text_message('Invalid parameter query')
|
|
|
-
|
|
|
+
|
|
|
# get replace value
|
|
|
replace_value = tool_parameters.get('replace_value', '')
|
|
|
if not replace_value:
|
|
|
return self.create_text_message('Invalid parameter replace_value')
|
|
|
-
|
|
|
+
|
|
|
# get replace model
|
|
|
replace_model = tool_parameters.get('replace_model', '')
|
|
|
if not replace_model:
|
|
|
return self.create_text_message('Invalid parameter replace_model')
|
|
|
|
|
|
+ ensure_ascii = tool_parameters.get('ensure_ascii', True)
|
|
|
try:
|
|
|
if replace_model == 'pattern':
|
|
|
# get replace pattern
|
|
|
replace_pattern = tool_parameters.get('replace_pattern', '')
|
|
|
if not replace_pattern:
|
|
|
return self.create_text_message('Invalid parameter replace_pattern')
|
|
|
- result = self._replace_pattern(content, query, replace_pattern, replace_value)
|
|
|
+ result = self._replace_pattern(content, query, replace_pattern, replace_value, ensure_ascii)
|
|
|
elif replace_model == 'key':
|
|
|
- result = self._replace_key(content, query, replace_value)
|
|
|
+ result = self._replace_key(content, query, replace_value, ensure_ascii)
|
|
|
elif replace_model == 'value':
|
|
|
- result = self._replace_value(content, query, replace_value)
|
|
|
+ result = self._replace_value(content, query, replace_value, ensure_ascii)
|
|
|
return self.create_text_message(str(result))
|
|
|
except Exception:
|
|
|
return self.create_text_message('Failed to replace JSON content')
|
|
|
|
|
|
# Replace pattern
|
|
|
- def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str) -> str:
|
|
|
+ def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str, ensure_ascii: bool) -> str:
|
|
|
try:
|
|
|
input_data = json.loads(content)
|
|
|
expr = parse(query)
|
|
|
-
|
|
|
+
|
|
|
matches = expr.find(input_data)
|
|
|
-
|
|
|
+
|
|
|
for match in matches:
|
|
|
new_value = match.value.replace(replace_pattern, replace_value)
|
|
|
match.full_path.update(input_data, new_value)
|
|
|
-
|
|
|
- return json.dumps(input_data, ensure_ascii=True)
|
|
|
+
|
|
|
+ return json.dumps(input_data, ensure_ascii=ensure_ascii)
|
|
|
except Exception as e:
|
|
|
return str(e)
|
|
|
-
|
|
|
+
|
|
|
# Replace key
|
|
|
- def _replace_key(self, content: str, query: str, replace_value: str) -> str:
|
|
|
+ def _replace_key(self, content: str, query: str, replace_value: str, ensure_ascii: bool) -> str:
|
|
|
try:
|
|
|
input_data = json.loads(content)
|
|
|
expr = parse(query)
|
|
|
-
|
|
|
+
|
|
|
matches = expr.find(input_data)
|
|
|
-
|
|
|
+
|
|
|
for match in matches:
|
|
|
parent = match.context.value
|
|
|
if isinstance(parent, dict):
|
|
@@ -86,21 +87,21 @@ class JSONReplaceTool(BuiltinTool):
|
|
|
if isinstance(item, dict) and old_key in item:
|
|
|
value = item.pop(old_key)
|
|
|
item[replace_value] = value
|
|
|
- return json.dumps(input_data, ensure_ascii=True)
|
|
|
+ return json.dumps(input_data, ensure_ascii=ensure_ascii)
|
|
|
except Exception as e:
|
|
|
return str(e)
|
|
|
-
|
|
|
+
|
|
|
# Replace value
|
|
|
- def _replace_value(self, content: str, query: str, replace_value: str) -> str:
|
|
|
+ def _replace_value(self, content: str, query: str, replace_value: str, ensure_ascii: bool) -> str:
|
|
|
try:
|
|
|
input_data = json.loads(content)
|
|
|
expr = parse(query)
|
|
|
-
|
|
|
+
|
|
|
matches = expr.find(input_data)
|
|
|
-
|
|
|
+
|
|
|
for match in matches:
|
|
|
match.full_path.update(input_data, replace_value)
|
|
|
-
|
|
|
- return json.dumps(input_data, ensure_ascii=True)
|
|
|
+
|
|
|
+ return json.dumps(input_data, ensure_ascii=ensure_ascii)
|
|
|
except Exception as e:
|
|
|
- return str(e)
|
|
|
+ return str(e)
|