# 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)!