CSV to JSON Converter - thepoopooman652/proishs-webtools GitHub Wiki
CSV to JSON Converter - Complete Documentation
Overview
The CSV to JSON Converter is a web-based tool built with PHP that allows users to upload CSV (Comma-Separated Values) files and convert them to JSON (JavaScript Object Notation) format. The tool provides a clean, user-friendly interface with real-time conversion and instant download capabilities.
Features
Core Functionality
-
File Upload
- Accepts CSV files through a drag-and-drop style interface
- File type validation to ensure only CSV files are processed
- Visual feedback showing the selected file name
-
CSV to JSON Conversion
- Parses CSV files with automatic header detection
- Converts rows to JSON objects using headers as keys
- Intelligent data type inference (numbers, booleans, null values)
- Pretty-printed JSON output for readability
-
File Download
- One-click download of converted JSON file
- Automatic filename generation (replaces .csv extension with .json)
- Browser-based download without server-side file storage
-
Error Handling
- File upload validation
- CSV format verification
- Empty file detection
- Clear error messages for users
How It Works
Technical Architecture
The application is built as a single-page PHP application that combines:
- HTML for structure
- CSS for styling
- JavaScript for client-side interactions
- PHP for server-side CSV processing
Workflow Process
-
User Uploads CSV File
- User clicks "Choose CSV File" button
- Browser file picker opens with .csv filter
- Selected file name is displayed on the interface
- "Convert to JSON" button becomes enabled
-
Conversion Process
- User clicks "Convert to JSON" button
- JavaScript prevents default form submission
- File is sent to server via AJAX POST request
- PHP processes the file on the server
-
Server-Side Processing
- PHP validates the uploaded file
- Checks file extension is .csv
- Opens and reads the CSV file
- First row is treated as headers
- Each subsequent row is converted to a JSON object
- Data types are automatically inferred
-
Data Type Inference The converter intelligently detects data types:
- Numbers: Converted to integers or floats
- Booleans: "true" or "false" strings become boolean values
- Empty values: Converted to
null - Strings: All other values remain as strings
-
JSON Generation
- Array of objects is created from CSV rows
- Data array is sent to the browser as a native JavaScript object
- Client-side JavaScript formats the JSON with pretty-print (2-space indentation)
- Unicode characters are preserved throughout the process
-
Download
- Data array is stored in browser memory
- User clicks "Download JSON File" button
- JavaScript stringifies the data with 2-space indentation for readability
- Blob object created from the formatted JSON string
- Browser downloads file with appropriate name
File Structure
index.php
The main application file contains:
HTML Structure
- Modern, responsive container layout
- File upload form with styled input
- Upload area with visual feedback
- Convert and download buttons
- Information section with usage instructions
CSS Styling
- Gradient background for visual appeal
- Card-based container design
- Interactive hover effects
- Responsive design for mobile devices
- Color-coded success/error messages
- Disabled button states for better UX
JavaScript Functionality
- File input change detection
- Form submission handling via AJAX
- Dynamic UI updates (messages, button states)
- JSON blob creation and download
- Automatic filename generation
PHP Backend
- POST request handling
- File upload validation
- CSV parsing with
fgetcsv() - Data type conversion logic
- JSON encoding with error handling
- HTTP response with JSON data
Usage Instructions
For End Users
-
Open the Application
- Navigate to the application URL in your web browser
- You'll see the CSV to JSON Converter interface
-
Upload Your CSV File
- Click the "Choose CSV File" button
- Select a CSV file from your computer
- The file name will appear below the button
-
Convert the File
- Click the "Convert to JSON" button
- Wait for the conversion (usually instant)
- Success message will appear with record count
-
Download the Result
- Click the "Download JSON File" button
- The JSON file will download to your computer
- File will have the same name as your CSV but with .json extension
CSV File Requirements
Your CSV file should be formatted as follows:
- First row: Column headers (will become JSON keys)
- Subsequent rows: Data values
- Delimiter: Comma (,)
- Encoding: UTF-8 recommended for special characters
Example CSV:
name,age,email,active
John Doe,30,[email protected],true
Jane Smith,25,[email protected],false
Bob Johnson,35,[email protected],true
Resulting JSON:
[
{
"name": "John Doe",
"age": 30,
"email": "[email protected]",
"active": true
},
{
"name": "Jane Smith",
"age": 25,
"email": "[email protected]",
"active": false
},
{
"name": "Bob Johnson",
"age": 35,
"email": "[email protected]",
"active": true
}
]
Technical Details
PHP Functions Used
-
fgetcsv()- Parses a line from CSV file into an array
- Parameters: file handle, max length, delimiter
- Returns array of values or false on end of file
-
json_encode()- Converts PHP array/object to JSON string
- Used to create the response envelope sent to the browser
- The data array is sent directly (no pre-encoding) to avoid double encoding
-
pathinfo()- Gets file extension for validation
- Ensures only .csv files are processed
-
fopen()/fclose()- Opens and closes file handles
- Required for reading CSV files
Data Type Conversion Logic
The converter uses the following rules:
// Numeric detection
if (is_numeric($value)) {
// Decimal number
if (strpos($value, '.') !== false) {
$rowData[$header] = floatval($value);
// Integer
} else {
$rowData[$header] = intval($value);
}
}
// Boolean detection
elseif (strtolower($value) === 'true') {
$rowData[$header] = true;
}
elseif (strtolower($value) === 'false') {
$rowData[$header] = false;
}
// Empty value
elseif ($value === '') {
$rowData[$header] = null;
}
// String (default)
else {
$rowData[$header] = $value;
}
Security Features
-
File Type Validation
- Only .csv extensions accepted
- Server-side validation in addition to client-side
-
Upload Error Checking
- Verifies file was uploaded successfully
- Checks for PHP upload errors
-
File Size Limits
- Controlled by PHP configuration
- Default limits apply from php.ini
-
No Server-Side Storage
- Files processed in memory
- Temporary files cleaned up automatically
- No persistent storage of user data
Browser Compatibility
The application works with modern browsers that support:
- HTML5 File API
- Fetch API
- Blob and URL.createObjectURL
- ES6 JavaScript features
Compatible browsers include:
- Chrome 60+
- Firefox 55+
- Safari 11+
- Edge 79+
Error Messages
The application provides clear error messages for common issues:
| Error | Cause | Solution |
|---|---|---|
| "No file uploaded or upload error occurred" | File upload failed | Try uploading again |
| "Only CSV files are allowed" | Wrong file type selected | Select a .csv file |
| "Unable to read the CSV file" | File is corrupted or unreadable | Check file integrity |
| "No data found in CSV file or invalid format" | Empty file or malformed CSV | Verify CSV has headers and data |
| "Error converting to JSON" | JSON encoding failed | Check for special characters |
Customization Options
Changing the Delimiter
By default, the converter uses comma (,) as delimiter. To use a different delimiter (e.g., semicolon for European CSVs):
// Change this line in index.php
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
// To this (for semicolon delimiter)
while (($row = fgetcsv($handle, 1000, ';')) !== false) {
Modifying JSON Output Format
To change JSON formatting, modify the JavaScript JSON.stringify() call in the download handler:
// Current format (pretty-printed with 2-space indentation)
const jsonString = JSON.stringify(jsonData, null, 2);
// Compact format (no whitespace)
const jsonString = JSON.stringify(jsonData);
// With 4-space indentation
const jsonString = JSON.stringify(jsonData, null, 4);
// With tab indentation
const jsonString = JSON.stringify(jsonData, null, '\t');
Styling Customization
The CSS is embedded in the HTML. Key variables you might want to change:
- Primary color:
#667eea(purple-blue gradient start) - Secondary color:
#764ba2(purple gradient end) - Container width:
max-width: 600px - Border radius:
border-radius: 12px
Limitations
-
File Size
- Limited by PHP's
upload_max_filesizesetting - Default is typically 2MB-8MB depending on server
- Large files may timeout or run out of memory
- Limited by PHP's
-
CSV Format
- First row must contain headers
- All rows should have same number of columns
- Only comma delimiter supported by default
-
Browser Storage
- JSON stored temporarily in browser memory
- Very large conversions may cause memory issues
- Recommended for files under 10MB
Troubleshooting
File Won't Upload
- Check file extension is .csv
- Verify file isn't corrupted
- Try with a smaller file
- Check browser console for errors
Conversion Fails
- Ensure CSV has proper headers in first row
- Verify all rows have same column count
- Check for special characters causing issues
- Look for very long field values
Download Doesn't Work
- Enable pop-ups for the site
- Check browser's download settings
- Ensure JavaScript is enabled
- Try a different browser
Conclusion
The CSV to JSON Converter is a simple yet powerful tool for data format conversion. It handles the most common CSV to JSON conversion needs while maintaining data integrity and providing a smooth user experience. The single-file architecture makes it easy to deploy on any PHP-enabled web server without additional dependencies or database requirements.