| 
					
				 | 
			
			
				@@ -35,6 +35,10 @@ class JSONReplaceTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not replace_model: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return self.create_text_message('Invalid parameter replace_model') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # get value decode. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # if true, it will be decoded to an dict 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        value_decode = tool_parameters.get('value_decode', False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ensure_ascii = tool_parameters.get('ensure_ascii', True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if replace_model == 'pattern': 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -42,17 +46,17 @@ class JSONReplaceTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 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, ensure_ascii) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result = self._replace_pattern(content, query, replace_pattern, replace_value, ensure_ascii, value_decode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             elif replace_model == 'key': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 result = self._replace_key(content, query, replace_value, ensure_ascii) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             elif replace_model == 'value': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                result = self._replace_value(content, query, replace_value, ensure_ascii) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result = self._replace_value(content, query, replace_value, ensure_ascii, value_decode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             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, ensure_ascii: bool) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _replace_pattern(self, content: str, query: str, replace_pattern: str, replace_value: str, ensure_ascii: bool, value_decode: bool) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             input_data = json.loads(content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             expr = parse(query) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -61,6 +65,12 @@ class JSONReplaceTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for match in matches: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 new_value = match.value.replace(replace_pattern, replace_value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if value_decode is True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        new_value = json.loads(new_value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    except json.JSONDecodeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        return "Cannot decode replace value to json object" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 match.full_path.update(input_data, new_value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return json.dumps(input_data, ensure_ascii=ensure_ascii) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -92,10 +102,15 @@ class JSONReplaceTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return str(e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # Replace value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _replace_value(self, content: str, query: str, replace_value: str, ensure_ascii: bool) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _replace_value(self, content: str, query: str, replace_value: str, ensure_ascii: bool, value_decode: bool) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             input_data = json.loads(content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             expr = parse(query) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if value_decode is True: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    replace_value = json.loads(replace_value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                except json.JSONDecodeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return "Cannot decode replace value to json object" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             matches = expr.find(input_data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |