|
|
|
@ -35,23 +35,24 @@ class JSONReplaceTool(BuiltinTool):
|
|
|
|
if not replace_model:
|
|
|
|
if not replace_model:
|
|
|
|
return self.create_text_message('Invalid parameter replace_model')
|
|
|
|
return self.create_text_message('Invalid parameter replace_model')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ensure_ascii = tool_parameters.get('ensure_ascii', True)
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
if replace_model == 'pattern':
|
|
|
|
if replace_model == 'pattern':
|
|
|
|
# get replace pattern
|
|
|
|
# get replace pattern
|
|
|
|
replace_pattern = tool_parameters.get('replace_pattern', '')
|
|
|
|
replace_pattern = tool_parameters.get('replace_pattern', '')
|
|
|
|
if not replace_pattern:
|
|
|
|
if not replace_pattern:
|
|
|
|
return self.create_text_message('Invalid parameter 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':
|
|
|
|
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':
|
|
|
|
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))
|
|
|
|
return self.create_text_message(str(result))
|
|
|
|
except Exception:
|
|
|
|
except Exception:
|
|
|
|
return self.create_text_message('Failed to replace JSON content')
|
|
|
|
return self.create_text_message('Failed to replace JSON content')
|
|
|
|
|
|
|
|
|
|
|
|
# Replace pattern
|
|
|
|
# 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:
|
|
|
|
try:
|
|
|
|
input_data = json.loads(content)
|
|
|
|
input_data = json.loads(content)
|
|
|
|
expr = parse(query)
|
|
|
|
expr = parse(query)
|
|
|
|
@ -62,12 +63,12 @@ class JSONReplaceTool(BuiltinTool):
|
|
|
|
new_value = match.value.replace(replace_pattern, replace_value)
|
|
|
|
new_value = match.value.replace(replace_pattern, replace_value)
|
|
|
|
match.full_path.update(input_data, new_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:
|
|
|
|
except Exception as e:
|
|
|
|
return str(e)
|
|
|
|
return str(e)
|
|
|
|
|
|
|
|
|
|
|
|
# Replace key
|
|
|
|
# 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:
|
|
|
|
try:
|
|
|
|
input_data = json.loads(content)
|
|
|
|
input_data = json.loads(content)
|
|
|
|
expr = parse(query)
|
|
|
|
expr = parse(query)
|
|
|
|
@ -86,12 +87,12 @@ class JSONReplaceTool(BuiltinTool):
|
|
|
|
if isinstance(item, dict) and old_key in item:
|
|
|
|
if isinstance(item, dict) and old_key in item:
|
|
|
|
value = item.pop(old_key)
|
|
|
|
value = item.pop(old_key)
|
|
|
|
item[replace_value] = value
|
|
|
|
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:
|
|
|
|
except Exception as e:
|
|
|
|
return str(e)
|
|
|
|
return str(e)
|
|
|
|
|
|
|
|
|
|
|
|
# Replace value
|
|
|
|
# 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:
|
|
|
|
try:
|
|
|
|
input_data = json.loads(content)
|
|
|
|
input_data = json.loads(content)
|
|
|
|
expr = parse(query)
|
|
|
|
expr = parse(query)
|
|
|
|
@ -101,6 +102,6 @@ class JSONReplaceTool(BuiltinTool):
|
|
|
|
for match in matches:
|
|
|
|
for match in matches:
|
|
|
|
match.full_path.update(input_data, replace_value)
|
|
|
|
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:
|
|
|
|
except Exception as e:
|
|
|
|
return str(e)
|
|
|
|
return str(e)
|