[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Pankaj-Str/Complete-Python-Mastery/main/Tutorial/python-json.md [Back]  [Original]

# Python JSON

## Python JSON

Welcome to [codeswithpankaj.com](https://codeswithpankaj.com)! In this tutorial, we will explore how to work with JSON in Python using the `json` module. We'll cover how to encode and decode JSON, and provide detailed examples to illustrate their application.

### Table of Contents

1. Introduction to JSON
2. Why Use JSON?
3. The `json` Module
4. Encoding JSON
5. Decoding JSON
6. Working with JSON Files
7. Customizing JSON Encoding and Decoding
8. Practical Examples
9. Summary

### 1. Introduction to JSON

#### What is JSON?

JSON (JavaScript Object Notation) is a lightweight data-interchange format that is easy for humans to read and write and easy for machines to parse and generate. JSON is built on two structures:

* A collection of name/value pairs (often referred to as an object, dictionary, hash table, etc.).
* An ordered list of values (often referred to as an array, list, vector, etc.).

#### Key Points

* JSON is language-independent but uses conventions familiar to programmers of the C-family of languages.
* JSON is often used to transmit data between a server and web application as text.

### 2. Why Use JSON?

* **Interoperability:** JSON is a widely accepted format for data exchange between different systems and programming languages.
* **Simplicity:** JSON is easy to read and write for both humans and machines.
* **Flexibility:** JSON supports complex data structures like nested objects and arrays.

### 3. The `json` Module

The `json` module in Python provides functions to encode (serialize) and decode (deserialize) JSON data.

### 4. Encoding JSON

#### Example: Encoding a Python Dictionary to JSON

```python
import json

# Python dictionary
data = {
    "name": "Pankaj",
    "age": 30,
    "city": "New York"
}

# Convert Python dictionary to JSON
json_data = json.dumps(data, indent=4)
print(json_data)
```

#### Example: Encoding a Python List to JSON

```python
import json

# Python list
data = ["apple", "banana", "cherry"]

# Convert Python list to JSON
json_data = json.dumps(data, indent=4)
print(json_data)
```

### 5. Decoding JSON

#### Example: Decoding JSON to a Python Dictionary

```python
import json

# JSON data
json_data = '''
{
    "name": "Pankaj",
    "age": 30,
    "city": "New York"
}
'''

# Convert JSON to Python dictionary
data = json.loads(json_data)
print(data)
```

#### Example: Decoding JSON to a Python List

```python
import json

# JSON data
json_data = '''
[
    "apple",
    "banana",
    "cherry"
]
'''

# Convert JSON to Python list
data = json.loads(json_data)
print(data)
```

### 6. Working with JSON Files

#### Example: Writing JSON to a File

```python
import json

# Python dictionary
data = {
    "name": "Pankaj",
    "age": 30,
    "city": "New York"
}

# Write JSON to a file
with open('data.json', 'w') as file:
    json.dump(data, file, indent=4)
```

#### Example: Reading JSON from a File

```python
import json

# Read JSON from a file
with open('data.json', 'r') as file:
    data = json.load(file)

print(data)
```

### 7. Customizing JSON Encoding and Decoding

#### Example: Customizing Encoding with `cls` Parameter

```python
import json

class User:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

def encode_user(obj):
    if isinstance(obj, User):
        return {"name": obj.name, "age": obj.age, "city": obj.city}
    raise TypeError(f"Object of type {obj.__class__.__name__} is not JSON serializable")

user = User("Pankaj", 30, "New York")

# Encode User object to JSON
json_data = json.dumps(user, default=encode_user, indent=4)
print(json_data)
```

#### Example: Customizing Decoding with `object_hook` Parameter

```python
import json

class User:
    def __init__(self, name, age, city):
        self.name = name
        self.age = age
        self.city = city

def decode_user(dct):
    return User(dct['name'], dct['age'], dct['city'])

json_data = '''
{
    "name": "Pankaj",
    "age": 30,
    "city": "New York"
}
'''

# Decode JSON to User object
user = json.loads(json_data, object_hook=decode_user)
print(user.name, user.age, user.city)
```

### 8. Practical Examples

#### Example 1: Handling Nested JSON

```python
import json

# Nested Python dictionary
data = {
    "name": "Pankaj",
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    },
    "phone_numbers": [
        {"type": "home", "number": "212-555-1234"},
        {"type": "work", "number": "646-555-4567"}
    ]
}

# Convert Python dictionary to JSON
json_data = json.dumps(data, indent=4)
print(json_data)
```

#### Example 2: Parsing JSON from a Web API

```python
import json
import requests

# Fetch JSON data from a web API
response = requests.get('https://jsonplaceholder.typicode.com/todos/1')
data = response.json()

# Pretty print the JSON data
print(json.dumps(data, indent=4))
```

#### Example 3: Encoding and Decoding DateTime Objects

```python
import json
from datetime import datetime

class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

data = {
    "name": "Pankaj",
    "timestamp": datetime.now()
}

# Encode datetime object to JSON
json_data = json.dumps(data, cls=DateTimeEncoder, indent=4)
print(json_data)

# Decode datetime object from JSON
def decode_datetime(dct):
    for key, value in dct.items():
        try:
            dct[key] = datetime.fromisoformat(value)
        except:
            pass
    return dct

decoded_data = json.loads(json_data, object_hook=decode_datetime)
print(decoded_data)
```

### 9. Summary

In this tutorial, we explored how to work with JSON in Python using the `json` module. We covered encoding and decoding JSON, working with JSON files, customizing JSON encoding and decoding, and provided practical examples to illustrate the application of JSON in Python. The `json` module is a powerful tool for handling JSON data in Python.

For more tutorials and in-depth explanations, visit [codeswithpankaj.com](https://codeswithpankaj.com)!

***

This tutorial provides a comprehensive overview of working with JSON in Python, detailing each topic and subtopic with examples and explanations. For more such tutorials, keep following [codeswithpankaj.com](https://codeswithpankaj.com)!

Web Proxy Viewer  |  New URL  |  Original Page