JSON Best Practices: A Complete Guide for Developers
Writing clean, consistent, and maintainable JSON is essential for modern development. This guide covers the best practices every developer should follow when working with JSON data.
1. Use Consistent Naming Conventions
One of the most important aspects of well-structured JSON is consistent naming. Choose a convention and stick with it throughout your entire project.
camelCase (Recommended for APIs)
{
"firstName": "John",
"lastName": "Doe",
"emailAddress": "john@example.com",
"phoneNumber": "+1-555-1234"
}
snake_case (Common in Python ecosystems)
{
"first_name": "John",
"last_name": "Doe",
"email_address": "john@example.com",
"phone_number": "+1-555-1234"
}
Avoid mixing conventions within the same API or project. Inconsistent naming leads to confusion and bugs.
2. Keep Your JSON Flat When Possible
Deeply nested JSON structures are harder to read, parse, and maintain. Flatten your data when it makes sense.
Avoid Deep Nesting
{
"user": {
"profile": {
"personal": {
"name": {
"first": "John",
"last": "Doe"
}
}
}
}
}
Prefer Flat Structures
{
"userId": 1,
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com"
}
3. Use Proper Data Types
JSON supports several data types. Use them correctly instead of encoding everything as strings.
{
"name": "John Doe",
"age": 30,
"isActive": true,
"balance": 1250.50,
"middleName": null,
"roles": ["admin", "user"],
"address": {
"city": "New York",
"zipCode": "10001"
}
}
"age": "30" should be "age": 30
4. Use Arrays for Collections
When representing a list of items, always use arrays instead of numbered keys.
Bad — Numbered Keys
{
"item1": "Apple",
"item2": "Banana",
"item3": "Cherry"
}
Good — Array
{
"items": ["Apple", "Banana", "Cherry"]
}
Advertisement
5. Include Metadata in API Responses
When building APIs, include helpful metadata alongside your data.
{
"data": [
{"id": 1, "name": "John"},
{"id": 2, "name": "Jane"}
],
"meta": {
"total": 100,
"page": 1,
"perPage": 10,
"totalPages": 10
},
"links": {
"self": "/api/users?page=1",
"next": "/api/users?page=2",
"last": "/api/users?page=10"
}
}
6. Use Consistent Error Formats
Standardize your error responses across your entire API.
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The request body contains invalid fields.",
"details": [
{
"field": "email",
"message": "Must be a valid email address"
},
{
"field": "age",
"message": "Must be a positive integer"
}
]
}
}
7. Date and Time Formatting
Always use ISO 8601 format for dates and times. This is universally understood and easily parsed by all programming languages.
{
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T14:45:30+02:00",
"expiresAt": "2024-12-31T23:59:59Z"
}
8. Handle Null Values Properly
Use null to represent the absence of a value. Don't use empty strings or omit the field entirely
(unless documented).
{
"firstName": "John",
"middleName": null,
"lastName": "Doe",
"nickname": null
}
9. Validate Your JSON
Always validate JSON before sending or processing it. Use JSON Schema for complex validation rules.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["name", "email"],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"email": {
"type": "string",
"format": "email"
},
"age": {
"type": "integer",
"minimum": 0,
"maximum": 150
}
}
}
10. Minify for Production
While beautified JSON is great for development and debugging, always minify JSON for production use. This reduces bandwidth and improves performance.
- Development: Use pretty-printed JSON with 2 or 4 space indentation
- Production: Minify to remove all unnecessary whitespace
- Logging: Use single-line JSON for easier log parsing
Summary Checklist
| Practice | Status |
|---|---|
| Consistent naming convention | ✅ Required |
| Flat structure when possible | ✅ Required |
| Correct data types | ✅ Required |
| Arrays for collections | ✅ Required |
| API response metadata | 👍 Recommended |
| Consistent error format | 👍 Recommended |
| ISO 8601 dates | ✅ Required |
| Proper null handling | ✅ Required |
| JSON Schema validation | 👍 Recommended |
| Minify for production | ✅ Required |