View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All
View All

Python JSON: Read, Write, Parse, and Convert Data with Examples

Updated on 28/05/20255,746 Views

JSON (JavaScript Object Notation) is a lightweight data interchange format. The Python json module provides built-in support for working with JSON data. JSON is widely used for data exchange between web applications and APIs. It stores data in key-value pairs similar to Python dictionaries.

Working with JSON in Python is essential for modern software development. You can easily read json file in python and convert data between formats. The json module offers methods like dumps() and loads() for data conversion. Understanding how to read a json file in python helps build robust applications. 

Most web APIs return data in JSON format, making these skills crucial for developers. Modern applications heavily rely on JSON for configuration files and data storage. Learning these skills is valuable for developers taking online Software Engineering courses.

What is JSON in Python

JSON stands for JavaScript Object Notation, but it works with many programming languages. In Python, JSON data looks similar to Python dictionaries and lists. JSON uses text format to store and transmit data between different systems.

Python's json module provides tools to work with JSON data efficiently. You can convert Python objects to JSON strings and vice versa. JSON supports basic data types like strings, numbers, booleans, and null values. It also supports complex structures like arrays and objects.

What is json in python? It's a standard format for data exchange. JSON files have the .json extension and contain structured data. Python treats JSON objects as dictionaries and JSON arrays as lists.

Enhance your abilities through these best-in-class courses/certifications.

Python JSON Module Overview

The json module is part of Python's standard library. You don't need to install it separately. Import it using import json at the beginning of your script.

The module provides four main methods for JSON operations:

  • json.dumps() - Converts Python objects to JSON strings
  • json.loads() - Parses JSON strings to Python objects
  • json.dump() - Writes Python objects to JSON files
  • json.load() - Reads JSON data from files

These methods handle the conversion between Python and JSON formats automatically. They make working with JSON data simple and straightforward. The module also provides options for formatting and error handling.

How to Read JSON File in Python

Reading JSON files is a common task in Python programming. You need to open the file and use the json module to parse the data. How to read a json file in python involves two main steps.

First, open the file using Python's built-in open() function. Then, use json.load() to parse the JSON content into Python objects. The process is straightforward and handles most JSON files automatically.

import json

# Open and read JSON file
with open('data.json', 'r') as file:
    data = json.load(file)
    print(data)

Output:

{'name': 'John', 'age': 30, 'city': 'New York', 'hobbies': ['reading', 'swimming']}

How to read json file in python depends on the file structure. The json.load() method automatically converts JSON objects to Python dictionaries. JSON arrays become Python lists during the conversion process.

Using json.load() Method

The json.load() method reads JSON data directly from file objects. It parses the entire file content and returns Python objects. This method is efficient for reading complete JSON files.

import json

def read_json_file(filename):
    with open(filename, 'r') as file:
        return json.load(file)

# Example usage
user_data = read_json_file('users.json')
print(f"Total users: {len(user_data)}")

Output:

Total users: 3

The method handles different JSON data types automatically. Objects become dictionaries, arrays become lists, and primitive values stay as-is. Always use the with statement to ensure proper file handling.

Handling JSON Reading Errors

JSON files might contain invalid syntax or formatting errors. Python raises exceptions when it encounters malformed JSON data. Proper error handling prevents your program from crashing unexpectedly.

import json

def safe_read_json(filename):
    try:
        with open(filename, 'r') as file:
            return json.load(file)
    except FileNotFoundError:
        print(f"File {filename} not found")
        return None
    except json.JSONDecodeError as e:
        print(f"Invalid JSON format: {e}")
        return None

# Test with missing file
result = safe_read_json('missing_file.json')
print(f"Result: {result}")

Output:

File missing_file.json not found

Result: None

Common JSON errors include missing commas, unmatched brackets, and invalid data types. The JSONDecodeError exception provides detailed information about parsing problems. Always wrap JSON operations in try-except blocks for production code.

Must read: How to Open a JSON File? A Complete Guide on Creating and Reading JSON 

Python JSON Dumps Method

The json.dumps() method converts Python objects to JSON strings. Python json dumps functionality is essential for data serialization. You can convert dictionaries, lists, and other Python objects to JSON format.

Json dumps in python accepts various parameters for formatting output. The method returns a JSON string that you can save or transmit. It handles data type conversion automatically during the process.

import json

# Python dictionary
person = {
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}

# Convert to JSON string
json_string = json.dumps(person)
print(json_string)
# Output: {"name": "John Doe", "age": 30, "city": "New York"}

Python json dumps method supports formatting options like indentation. You can make JSON output more readable using the indent parameter. The method also handles special characters and encoding properly.

Converting Python Objects to JSON

Different Python data types convert to JSON in specific ways. Dictionaries become JSON objects, lists become JSON arrays, and strings remain strings. Understanding these conversions helps you work with JSON data effectively.

Python Type

JSON Type

dict

object

list, tuple

array

str

string

int, float

number

True

true

False

false

None

null

import json

# Various Python objects
data = {
    "users": ["Alice", "Bob", "Charlie"],
    "count": 3,
    "active": True,
    "settings": None
}

# Convert to formatted JSON
formatted_json = json.dumps(data, indent=2)
print(formatted_json)

Output:

{

  "users": [

    "Alice",

    "Bob",

    "Charlie"

  ],

  "count": 3,

  "active": true,

  "settings": null

}

How to convert dict to json in python is straightforward with dumps(). The method preserves the dictionary structure and converts values appropriately. You can also convert nested dictionaries and complex data structures.

JSON Loads in Python

The json.loads() method parses JSON strings into Python objects. Json loads in python is the reverse operation of dumps(). You provide a JSON string and get Python objects back.

This method is useful when receiving JSON data from APIs or web services. It converts JSON strings to Python dictionaries and lists automatically. The parsing process handles all JSON data types correctly.

import json

# JSON string
json_string = '{"name": "Alice", "scores": [95, 87, 92]}'

# Parse JSON string
data = json.loads(json_string)
print(data)
print(type(data))  # <class 'dict'>

Output:

{'name': 'Alice', 'scores': [95, 87, 92]}

<class 'dict'>

Json loads in python raises exceptions for invalid JSON strings. Always validate JSON data before parsing to avoid runtime errors. The method works with both simple and complex JSON structures.

Parsing JSON Strings

JSON strings must follow proper syntax rules for successful parsing. Missing quotes, trailing commas, and invalid characters cause parsing errors. Understanding JSON syntax helps you debug parsing issues.

import json

def parse_json_safely(json_string):
    try:
        return json.loads(json_string)
    except json.JSONDecodeError as e:
        print(f"Parsing error: {e}")
        return None

# Valid JSON
valid_json = '{"status": "success", "data": [1, 2, 3]}'
result = parse_json_safely(valid_json)
print(result)

# Invalid JSON (missing quotes)
invalid_json = '{status: "error"}'
result = parse_json_safely(invalid_json)

Output:

{'status': 'success', 'data': [1, 2, 3]}

Parsing error: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Always use double quotes for JSON strings, not single quotes. JSON doesn't support trailing commas or comments like JavaScript. Validate JSON syntax before attempting to parse the data.

How to Convert String to JSON in Python

Converting strings to JSON in Python requires the json.loads() method. How to convert string to json in python depends on the string format. The string must contain valid JSON syntax for successful conversion.

import json

# String containing JSON data
json_string = '{"product": "laptop", "price": 999.99}'

# Convert string to JSON (Python dict)
json_data = json.loads(json_string)
print(json_data["product"])  # Output: laptop
print(type(json_data))       # Output: <class 'dict'>

Output:

laptop

<class 'dict'>

How to convert string to json in python is essential for API responses. Web services often return JSON data as strings. You need to parse these strings to access the data programmatically.

The conversion process validates JSON syntax automatically. Invalid strings raise JSONDecodeError exceptions. Always handle these exceptions in production code to prevent crashes.

How to Convert Dict to JSON in Python

Converting Python dictionaries to JSON is common in web development. How to convert dict to json in python uses the json.dumps() method. This process is called serialization or encoding.

import json

# Python dictionary
user_info = {
    "username": "john_doe",
    "email": "john@example.com",
    "preferences": {
        "theme": "dark",
        "notifications": True
    }
}

# Convert dict to JSON string
json_output = json.dumps(user_info, indent=2)
print(json_output)

Output:

{

  "username": "john_doe",

  "email": "john@example.com",

  "preferences": {

    "theme": "dark",

    "notifications": true

  }

}

How to convert dict to json in python supports nested dictionaries and lists. The dumps() method handles complex data structures automatically. You can also save the JSON output directly to files.

import json

# Save dictionary as JSON file
def save_dict_as_json(data, filename):
    with open(filename, 'w') as file:
        json.dump(data, file, indent=2)

# Example usage
user_data = {"name": "Alice", "age": 25}
save_dict_as_json(user_data, 'user.json')
print("Data saved successfully to user.json")

Output:

Data saved successfully to user.json

Working with JSON Data in Python

JSON data manipulation involves reading, modifying, and writing JSON content. Python provides flexible tools for working with JSON data structures. You can access nested values and modify data as needed.

import json

# Sample JSON data
data = {
    "employees": [
        {"name": "John", "department": "IT", "salary": 50000},
        {"name": "Jane", "department": "HR", "salary": 45000}
    ],
    "company": "TechCorp"
}

# Access nested data
first_employee = data["employees"][0]
print(f"Employee: {first_employee['name']}")

# Modify data
data["employees"][0]["salary"] = 55000

# Add new employee
new_employee = {"name": "Bob", "department": "Finance", "salary": 48000}
data["employees"].append(new_employee)

print(f"Updated salary: {data['employees'][0]['salary']}")
print(f"Total employees: {len(data['employees'])}")

Output:

Employee: John

Updated salary: 55000

Total employees: 3

Working with JSON arrays requires list operations in Python. You can append, remove, and modify array elements using standard Python methods. Dictionary operations work for JSON objects.

Best Practices for JSON in Python

Following best practices ensures reliable JSON handling in your applications. Always validate JSON data before processing it. Use proper error handling for file operations and parsing.

Key Best Practices:

  • Always use try-except blocks for JSON operations
  • Validate JSON schema when possible
  • Use proper encoding (UTF-8) for file operations
  • Handle None values appropriately in conversions
  • Use meaningful variable names for JSON data
  • Format JSON output for better readability when debugging
import json
from pathlib import Path

def robust_json_handler(filename):
    """Robust JSON file handler with proper error handling"""
    file_path = Path(filename)
    
    if not file_path.exists():
        return {"error": "File not found"}
    
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            data = json.load(file)
            return {"success": True, "data": data}
    except json.JSONDecodeError as e:
        return {"error": f"Invalid JSON: {e}"}
    except Exception as e:
        return {"error": f"Unexpected error: {e}"}

# Test the function
result = robust_json_handler('sample.json')
print(result)

Output:

{'error': 'File not found'}

Comparison: json.dumps() vs json.loads()

Understanding the differences between json.dumps() and json.loads() is crucial for JSON operations. These methods perform opposite functions in data conversion.

Method

Purpose

Input

Output

Use Case

json.dumps()

Serialize

Python objects

JSON string

Save data, API responses

json.loads()

Deserialize

JSON string

Python objects

Parse API data, read configs

import json

# Demonstrate both methods
original_data = {"message": "Hello World", "numbers": [1, 2, 3]}

# dumps(): Python → JSON string
json_string = json.dumps(original_data)
print(f"JSON string: {json_string}")

# loads(): JSON string → Python
parsed_data = json.loads(json_string)
print(f"Python object: {parsed_data}")
print(f"Are they equal? {original_data == parsed_data}")

Output:

JSON string: {"message": "Hello World", "numbers": [1, 2, 3]}

Python object: {'message': 'Hello World', 'numbers': [1, 2, 3]}

Are they equal? True

Practical Example: JSON Data Processing

Problem Statement: Create a program that reads employee data from a JSON file, calculates average salary by department, and saves the results to a new JSON file.

import json
from collections import defaultdict

def process_employee_data():
    """
    Read employee JSON data, calculate department averages,
    and save results to a new file.
    """
    
    # Sample employee data
    employees = {
        "employees": [
            {"name": "Alice Johnson", "department": "Engineering", "salary": 75000},
            {"name": "Bob Smith", "department": "Engineering", "salary": 68000},
            {"name": "Carol Davis", "department": "Marketing", "salary": 52000},
            {"name": "David Wilson", "department": "Marketing", "salary": 48000},
            {"name": "Eve Brown", "department": "Sales", "salary": 45000}
        ]
    }
    
    # Save sample data to file first
    with open('employees.json', 'w') as file:
        json.dump(employees, file, indent=2)
    
    # Read JSON file
    try:
        with open('employees.json', 'r') as file:
            data = json.load(file)
    except (FileNotFoundError, json.JSONDecodeError) as e:
        print(f"Error reading file: {e}")
        return
    
    # Calculate department averages
    dept_totals = defaultdict(list)
    
    for employee in data['employees']:
        dept = employee['department']
        salary = employee['salary']
        dept_totals[dept].append(salary)
    
    # Calculate averages
    dept_averages = {}
    for dept, salaries in dept_totals.items():
        avg_salary = sum(salaries) / len(salaries)
        dept_averages[dept] = round(avg_salary, 2)
    
    # Prepare results
    results = {
        "department_averages": dept_averages,
        "total_employees": len(data['employees']),
        "departments_count": len(dept_averages)
    }
    
    # Save results to new JSON file
    with open('salary_analysis.json', 'w') as file:
        json.dump(results, file, indent=2)
    
    return results

# Execute the function
result = process_employee_data()
print("Analysis Results:")
print(json.dumps(result, indent=2))

Output:

{

  "department_averages": {

    "Engineering": 71500.0,

    "Marketing": 50000.0,

    "Sales": 45000.0

  },

  "total_employees": 5,

  "departments_count": 3

}

Explanation: This example demonstrates reading JSON files, processing data with Python, and writing results back to JSON. The program uses json.load() to read employee data and json.dump() to save analysis results. Error handling ensures the program works reliably with real-world data.

Conclusion

JSON handling in Python is straightforward with the built-in json module. You can easily read json file in python using json.load() method. The python json dumps function converts Python objects to JSON strings. Understanding json loads in python helps parse JSON data from various sources. 

These skills are essential for modern web development and API integration. JSON knowledge opens doors to working with databases and cloud services. Start practicing with different JSON structures to master these concepts completely. So, learn Python JSON now!

FAQS

1. How do I read a JSON file in Python?

Use the json.load() method with a file object. Open the file with open() and pass it to json.load() to parse the content into Python objects. Always use the with statement to ensure proper file handling and automatic file closure. Remember to handle potential FileNotFoundError and JSONDecodeError exceptions for robust error handling.

2. What is the difference between json.load() and json.loads()?

json.load() reads JSON data from file objects, while json.loads() parses JSON strings. Use load() for files and loads() for string data. The 's' in loads() stands for 'string', making it easy to remember the difference. Both methods return the same Python object types but accept different input sources.

3. How do I convert a Python dictionary to JSON?

Use json.dumps() to convert Python dictionaries to JSON strings. You can also use json.dump() to write directly to files. The dumps() method accepts formatting parameters like indent for better readability. Both methods handle nested dictionaries and complex data structures automatically without additional configuration.

4. Why do I get JSONDecodeError when reading JSON files?

JSONDecodeError occurs when JSON syntax is invalid. Check for missing commas, unmatched brackets, or invalid characters in your JSON data. Common issues include trailing commas, single quotes instead of double quotes, and undefined values. Use a JSON validator or linter to identify syntax problems before attempting to parse the data.

5. How do I handle JSON files with special characters?

Specify UTF-8 encoding when opening files: open(filename, 'r', encoding='utf-8'). This ensures proper handling of special characters. UTF-8 is the standard encoding for JSON files and supports international characters, emojis, and symbols. Always use explicit encoding to avoid character encoding issues on different operating systems.

6. Can I convert Python tuples to JSON?

Yes, json.dumps() automatically converts tuples to JSON arrays. The conversion is the same as for Python lists. However, when you parse the JSON back with json.loads(), you'll get a Python list, not a tuple. If you need to preserve the tuple type, you'll need to implement custom serialization logic.

7. How do I format JSON output for better readability?

Use the indent parameter with json.dumps(): json.dumps(data, indent=2). This creates nicely formatted JSON with proper indentation. You can also use separators parameter to control comma and colon spacing. For production APIs, consider using compact format without indentation to reduce file size and network transfer time.

8. What happens to Python None values in JSON conversion?

Python None values become JSON null values during conversion. This maintains data integrity across different systems. The conversion is reversible - JSON null values become Python None when parsed back. This standard mapping ensures compatibility between Python applications and other systems that consume JSON data.

9. How do I validate JSON data before parsing it?

Wrap json operations in try-except blocks to catch JSONDecodeError exceptions. You can also use JSON schema validation libraries for complex validation. Consider using jsonschema library for advanced validation rules and data type checking. Always validate JSON structure and required fields before processing data in production applications.

10. Can I preserve the order of keys in JSON objects?

Yes, Python 3.7+ preserves dictionary order by default. JSON objects maintain the same key order as the original Python dictionary. This behavior is guaranteed by the language specification and helps with consistent output formatting. Earlier Python versions used OrderedDict to maintain key order explicitly.

11. How do I handle large JSON files efficiently?

For large JSON files, consider streaming parsers or process data in chunks. The standard json module loads entire files into memory. Use libraries like ijson for streaming JSON parsing of large datasets. You can also implement pagination or batch processing for very large JSON files to manage memory usage effectively.

12. How do I convert JSON arrays to Python lists?

json.loads() and json.load() automatically convert JSON arrays to Python lists. No additional conversion is needed. The conversion preserves array order and nested structures perfectly. All JSON array elements are converted to their corresponding Python types automatically during the parsing process.

image

Take our Free Quiz on Python

Answer quick questions and assess your Python knowledge

right-top-arrow
image
Join 10M+ Learners & Transform Your Career
Learn on a personalised AI-powered platform that offers best-in-class content, live sessions & mentorship from leading industry experts.
advertise-arrow

Free Courses

Explore Our Free Software Tutorials

upGrad Learner Support

Talk to our experts. We are available 7 days a week, 9 AM to 12 AM (midnight)

text

Indian Nationals

1800 210 2020

text

Foreign Nationals

+918068792934

Disclaimer

1.The above statistics depend on various factors and individual results may vary. Past performance is no guarantee of future results.

2.The student assumes full responsibility for all expenses associated with visas, travel, & related costs. upGrad does not provide any a.