diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 80d66df..7026e4c 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -13,6 +13,8 @@ The application is single page. The page is divided into three sections: - Bottom left section: Input area for JSON data - Bottom right section: Output are for JMESPath query results +The Middle section also contains a toolbar with buttons to load data from disk, load sample data, format JSON input, and clear all inputs. + The main components of the application are located in the `src` directory and target Node 24 LTS environment. Framework to be used: diff --git a/README.md b/README.md index 48cdd73..4897c0f 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ A React-based web application for testing and validating JMESPath expressions ag - 🎯 **Real-time Evaluation**: JMESPath expressions are evaluated instantly as you type - 📝 **JSON Validation**: Built-in JSON syntax validation and error reporting +- 📁 **File Upload**: Load JSON data directly from local files - 🎨 **Bootstrap UI**: Clean, responsive interface with Bootstrap styling - 🔄 **Sample Data**: Pre-loaded examples to get started quickly - 📱 **Responsive Design**: Works on desktop, tablet, and mobile devices @@ -73,11 +74,15 @@ npm run docker:run ## Usage 1. **Enter a JMESPath expression** in the top input field (e.g., `people[*].name`) -2. **Paste or type JSON data** in the bottom-left textarea +2. **Add JSON data** using one of these methods: + - **Load from disk**: Click "📁 Load from Disk" to upload a JSON file + - **Paste or type**: Enter JSON data directly in the bottom-left textarea + - **Load sample**: Use the "Load Sample" button for quick testing 3. **View the results** in the bottom-right output area 4. **Use the toolbar buttons** to: - - Load sample data - - Format JSON + - Load JSON data from local files + - Load sample data for testing + - Format JSON for better readability - Clear all inputs ### Example JMESPath Expressions diff --git a/src/App.js b/src/App.js index 1b0e330..c779b0b 100644 --- a/src/App.js +++ b/src/App.js @@ -116,6 +116,31 @@ function App() { }`); }; + const loadFromDisk = () => { + const fileInput = document.createElement('input'); + fileInput.type = 'file'; + fileInput.accept = '.json,.txt'; + fileInput.onchange = (event) => { + const file = event.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onload = (e) => { + try { + const content = e.target.result; + // Try to parse as JSON to validate + JSON.parse(content); + setJsonData(content); + setJsonError(''); + } catch (err) { + setJsonError(`Invalid JSON file: ${err.message}`); + } + }; + reader.readAsText(file); + } + }; + fileInput.click(); + }; + return (