codeharborhub.github.io/docs/python/json.md at main · codewithganeshhh/codeharborhub.github.io · GitHub
Skip to content

Latest commit

 

History

History
408 lines (309 loc) · 9.15 KB

File metadata and controls

408 lines (309 loc) · 9.15 KB
id json
title JSON with Python
sidebar_label JSON with Python
sidebar_position 3
tags
python
programming
language
introduction
json
features
applications
libraries
community
open-source
object-oriented
interpreted
cross-platform
scalable
description In this tutorial, we will learn about JSON and JSON with Python with deep detais of JSON

Working with JSON in Python

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. Python provides a built-in module called json for working with JSON data. In this tutorial, we will explore various aspects of working with JSON in Python, including parsing, serializing, deserializing, and handling complex data structures.

Introduction to JSON

JSON is a text format for storing and exchanging data. JSON data is represented as key-value pairs, similar to Python dictionaries. Here is an example of a JSON object:

{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "courses": ["Math", "Science", "History"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
  }
}

Parsing JSON in Python

To parse JSON data in Python, we use the json.loads() method, which converts a JSON string into a Python dictionary.

Example:

import json

json_data = '''
{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "courses": ["Math", "Science", "History"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
  }
}
'''

data = json.loads(json_data)

print(data)
print(data['name'])  # Output: John Doe

Serializing Data to JSON

To convert Python objects into JSON strings, we use the json.dumps() method.

Example:

import json

data = {
    "name": "John Doe",
    "age": 30,
    "isStudent": False,
    "courses": ["Math", "Science", "History"],
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA"
    }
}

json_data = json.dumps(data)

print(json_data)

Deserializing JSON to Python Objects

Deserializing is the process of converting a JSON string back into a Python object. We use the json.loads() method for this purpose.

Example:

import json

json_data = '''
{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "courses": ["Math", "Science", "History"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
  }
}
'''

data = json.loads(json_data)

print(data)

Working with Complex Data Structures

JSON can represent complex data structures such as nested dictionaries and lists. Let's see how to work with these structures in Python.

Example:

import json

json_data = '''
{
  "students": [
    {
      "name": "John Doe",
      "age": 30,
      "isStudent": false,
      "courses": ["Math", "Science", "History"],
      "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA"
      }
    },
    {
      "name": "Jane Smith",
      "age": 25,
      "isStudent": true,
      "courses": ["English", "Art", "Biology"],
      "address": {
        "street": "456 Elm St",
        "city": "Othertown",
        "state": "NY"
      }
    }
  ]
}
'''

data = json.loads(json_data)

students = data['students']
for student in students:
    print(f"Name: {student['name']}, Courses: {', '.join(student['courses'])}")

JSON Encoding and Decoding Custom Objects

Sometimes, you may need to serialize and deserialize custom Python objects. To handle this, you can define custom encoder and decoder classes.

Example:

import json

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

class PersonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Person):
            return {'name': obj.name, 'age': obj.age, 'city': obj.city}
        return super().default(obj)

def person_decoder(dct):
    if 'name' in dct and 'age' in dct and 'city' in dct:
        return Person(dct['name'], dct['age'], dct['city'])
    return dct

person = Person("John Doe", 30, "Anytown")

json_data = json.dumps(person, cls=PersonEncoder)
print(json_data)

person_obj = json.loads(json_data, object_hook=person_decoder)
print(f"Name: {person_obj.name}, Age: {person_obj.age}, City: {person_obj.city}")

Pretty Printing JSON

To make JSON data more readable, you can use the indent parameter of the json.dumps() method.

Example:

import json

data = {
    "name": "John Doe",
    "age": 30,
    "isStudent": False,
    "courses": ["Math", "Science", "History"],
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA"
    }
}

json_data = json.dumps(data, indent=4)
print(json_data)

Reading and Writing JSON Files

You can read JSON data from a file and write JSON data to a file using json.load() and json.dump() methods, respectively.

Example (Reading JSON from a file):

import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Example (Writing JSON to a file):

import json

data = {
    "name": "John Doe",
    "age": 30,
    "isStudent": False,
    "courses": ["Math", "Science", "History"],
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA"
    }
}

with open('data.json', 'w') as file:
    json.dump(data, file, indent=4)

Handling JSON Errors

When working with JSON data, errors can occur. It is important to handle these errors to ensure your program runs smoothly.

Example:

import json

invalid_json_data = '''
{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "courses": ["Math", "Science", "History"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
}
'''

try:
    data = json.loads(invalid_json_data)
except json.JSONDecodeError as e:
    print(f"JSONDecodeError: {e}")

JSON and APIs

JSON is widely used in APIs to exchange data between servers and clients. Python provides libraries like requests to work with APIs.

Example (Fetching JSON data from an API):

import requests
import json

url = 'https://api.example.com/data'
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"Failed to retrieve data: {response.status_code}")

Advanced Topics

JSONPath

JSONPath is a query language for JSON, similar to XPath for XML. It allows you to extract specific data from JSON documents.

Example (Using JSONPath):

import json
import jsonpath_ng

json_data = '''
{
  "store": {
    "book": [
      {"category": "fiction", "title": "The Great Gatsby"},
      {"category": "fiction", "title": "1984"},
      {"category": "science", "title": "A Brief History of Time"}
    ]
  }
}
'''

data = json.loads(json_data)

jsonpath_expr = jsonpath_ng.parse('$.store.book[*].title')
titles = [match.value for match in

 jsonpath_expr.find(data)]

print(titles)  # Output: ['The Great Gatsby', '1984', 'A Brief History of Time']

JSON Schema

JSON Schema is a powerful tool for validating the structure and content of JSON data.

Example (Using JSON Schema):

import json
import jsonschema
from jsonschema import validate

json_data = '''
{
  "name": "John Doe",
  "age": 30,
  "isStudent": false
}
'''

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "number"},
        "isStudent": {"type": "boolean"}
    },
    "required": ["name", "age", "isStudent"]
}

data = json.loads(json_data)

try:
    validate(instance=data, schema=schema)
    print("JSON data is valid")
except jsonschema.exceptions.ValidationError as e:
    print(f"JSON data is invalid: {e}")

JSON Web Tokens (JWT)

JWT is a compact, URL-safe means of representing claims to be transferred between two parties. Python libraries like PyJWT can be used to work with JWTs.

Example (Using JWT):

import jwt
import datetime

payload = {
    'user_id': 123,
    'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
secret = 'my_secret_key'
token = jwt.encode(payload, secret, algorithm='HS256')

print(f"Encoded JWT: {token}")

try:
    decoded_payload = jwt.decode(token, secret, algorithms=['HS256'])
    print(f"Decoded payload: {decoded_payload}")
except jwt.ExpiredSignatureError:
    print("Token has expired")
except jwt.InvalidTokenError:
    print("Invalid token")

Conclusion

In this tutorial, we covered various aspects of working with JSON in Python, including parsing, serializing, deserializing, handling complex data structures, encoding and decoding custom objects, pretty printing, reading and writing JSON files, handling errors, and working with APIs. We also explored advanced topics like JSONPath, JSON Schema, and JSON Web Tokens (JWT).

JSON is a versatile and widely used format for data interchange, and Python's json module provides powerful tools for working with JSON data. By mastering these techniques, you can effectively handle JSON data in your Python applications.