--- title: JSONSearchTool description: A tool for semantic search within JSON files using RAG capabilities icon: braces --- ## JSONSearchTool The JSONSearchTool enables semantic search capabilities for JSON files using Retrieval-Augmented Generation (RAG). It supports both fixed and dynamic file path modes, allowing flexible usage patterns. ## Installation ```bash pip install 'crewai[tools]' ``` ## Usage Example ```python from crewai import Agent from crewai_tools import JSONSearchTool # Method 1: Fixed path (specified at initialization) fixed_tool = JSONSearchTool( json_path="path/to/data.json" ) # Method 2: Dynamic path (specified at runtime) dynamic_tool = JSONSearchTool() # Create an agent with the tool researcher = Agent( role='JSON Data Researcher', goal='Search and analyze JSON data', backstory='Expert at finding relevant information in JSON files.', tools=[fixed_tool], # or [dynamic_tool] verbose=True ) ``` ## Input Schema ### Fixed Path Mode ```python class FixedJSONSearchToolSchema(BaseModel): search_query: str = Field( description="Mandatory search query you want to use to search the JSON's content" ) ``` ### Dynamic Path Mode ```python class JSONSearchToolSchema(BaseModel): json_path: str = Field( description="Mandatory json path you want to search" ) search_query: str = Field( description="Mandatory search query you want to use to search the JSON's content" ) ``` ## Function Signature ```python def __init__( self, json_path: Optional[str] = None, **kwargs ): """ Initialize the JSON search tool. Args: json_path (Optional[str]): Path to JSON file (optional for dynamic mode) **kwargs: Additional arguments for RAG tool configuration """ def _run( self, search_query: str, **kwargs: Any ) -> str: """ Execute semantic search on JSON contents. Args: search_query (str): Query to search in the JSON **kwargs: Additional arguments Returns: str: Relevant content from the JSON matching the query """ ``` ## Best Practices 1. File Handling: - Use absolute file paths - Verify file existence - Handle large JSON files - Monitor memory usage 2. Query Optimization: - Structure queries clearly - Consider JSON structure - Handle nested data - Monitor performance 3. Error Handling: - Check file access - Validate JSON format - Handle malformed JSON - Log issues 4. Mode Selection: - Choose fixed mode for static files - Use dynamic mode for runtime selection - Consider caching - Manage file lifecycle ## Integration Example ```python from crewai import Agent, Task, Crew from crewai_tools import JSONSearchTool # Initialize tool json_tool = JSONSearchTool( json_path="data/config.json" ) # Create agent researcher = Agent( role='JSON Data Analyst', goal='Extract insights from JSON configuration', backstory='Expert at analyzing JSON data structures.', tools=[json_tool] ) # Define task analysis_task = Task( description="""Find all configuration settings related to security.""", agent=researcher ) # Create crew crew = Crew( agents=[researcher], tasks=[analysis_task] ) # Execute result = crew.kickoff() ``` ## Advanced Usage ### Multiple File Analysis ```python # Create tools for different JSON files config_tool = JSONSearchTool( json_path="config/settings.json" ) data_tool = JSONSearchTool( json_path="data/records.json" ) # Create agent with multiple tools analyst = Agent( role='JSON Data Analyst', goal='Cross-reference configuration and data', tools=[config_tool, data_tool] ) ``` ### Dynamic File Loading ```python # Initialize dynamic tool dynamic_tool = JSONSearchTool() # Use with different JSON files result1 = dynamic_tool.run( json_path="file1.json", search_query="security settings" ) result2 = dynamic_tool.run( json_path="file2.json", search_query="user preferences" ) ``` ### Error Handling Example ```python try: json_tool = JSONSearchTool( json_path="config/settings.json" ) results = json_tool.run( search_query="encryption settings" ) print(results) except FileNotFoundError as e: print(f"JSON file not found: {str(e)}") except ValueError as e: print(f"Invalid JSON format: {str(e)}") except Exception as e: print(f"Error processing JSON: {str(e)}") ``` ## Notes - Inherits from RagTool - Supports fixed/dynamic modes - JSON path validation - Memory management - Performance optimization - Error handling - Search capabilities - Content extraction - Format validation - Security features