JSON - формат даних JavaScript Object Notation, який вирізняється легкістю та доступністю для читання і запису. Освоєння роботи з JSON необхідне під час використання даних з API, файлів налаштувань або інших джерел. У цій статті ми розглянемо ключові методи роботи з JSON за допомогою модуля json у Python.
JSON організовує дані у форматі ключ-значення, схожому на словники в Python. Розглянемо базовий приклад JSON-об'єкта:
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"]
}
У цьому прикладі JSON містить рядок, число, булеве значення і масив. Знання цих елементів структури критично важливе для ефективного парсингу та роботи з JSON-даними в Python.
Модуль JSON пропонує методи типу json.loads(), що дає змогу читати JSON із рядка, і json.load(), який застосовується для читання JSON із файлу. Для запису даних у форматі JSON використовуються методи json.dumps() і json.dump(), які дають змогу відповідно записувати JSON у рядок і файл.
Існує кілька способів читання даних JSON, які ми розглянемо далі:
Для читання даних JSON із рядка використовуйте метод json.loads():
import json
json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)
print(data)
Висновок:
Для читання даних JSON із файлу використовуйте метод json.load():
import json
with open('data.json', 'r') as file:
data = json.load(file)
print(data)
Висновок:
Нижче наведено різні способи записати дані JSON:
Для запису даних JSON у рядок використовуйте метод json.dumps():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
json_string = json.dumps(data)
print(json_string)
Висновок:
Для запису даних JSON у файл використовуйте метод json.dump():
import json
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Science"]
}
with open('data.json', 'w') as file:
json.dump(data, file)
Вкладені об'єкти JSON часто зустрічаються під час роботи зі складнішими структурами даних. Python легко справляється з цими вкладеними структурами.
import json
nested_json_string = '''
{
"name": "Alice",
"age": 30,
"is_student": false,
"courses": ["Math", "Science"],
"address": {
"street": "123 Main St",
"city": "Wonderland"
}
}
'''
data = json.loads(nested_json_string)
print(data['address']['city'])
Висновок:
Іноді необхідно перетворити настроювані об'єкти Python на JSON, що вимагає настроюваного кодувальника.
import json
class Student:
def __init__(self, name, age, is_student):
self.name = name
self.age = age
self.is_student = is_student
class StudentEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Student):
return obj.__dict__
return super().default(obj)
student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)
Висновок:
Аналогічно, для декодування даних JSON у настроювані об'єкти Python, вам знадобиться декодер, який можна налаштувати.
import json
class Student:
def __init__(self, name, age, is_student):
self.name = name
self.age = age
self.is_student = is_student
def student_decoder(dct):
return Student(dct['name'], dct['age'], dct['is_student'])
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)
Висновок:
Далі наведено найпоширеніші помилки під час роботи з JSON.
Поширена помилка під час аналізу JSON - це неприпустимий формат JSON. JSON вимагає подвійних лапок навколо ключів і строкових значень, а також правильного вкладення дужок і фігурних дужок.
import json
invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
print(f"Invalid JSON format: {e}")
Висновок:
Під час аналізу даних JSON ви можете зіткнутися з відсутніми ключами. Використовуйте метод get для надання значення за замовчуванням, якщо ключ відсутній.
import json
json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)
is_student = data.get('is_student', False)
print(is_student)import json
json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)
is_student = data.get('is_student', False)
print(is_student)
Використовуйте модуль pdb для встановлення точок зупинки та налагодження вашого коду парсингу JSON.
import json
import pdb
json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)
Веб-скрапінг часто пов'язаний із витяганням даних із веб-API, що повертають інформацію у форматі JSON. Розглянемо приклад роботи з бібліотекою requests і API Httpbin.
Перед початком встановіть бібліотеку requests:
pip install requests
Приклад коду нижче демонструє, як надіслати GET-запит до вказаного URL за допомогою функції requests.get(url) і обробити отриману JSON-відповідь за допомогою методу response.json(), перетворивши її на словник Python. Далі, програма витягує і виводить специфічні дані, як-от заголовки, інформацію про користувацького агента, джерело та URL.
Цей приклад також включає обробку винятків для стійкості коду: він перехоплює json.JSONDecodeError у разі помилок декодування JSON і KeyError за відсутності певних ключів. Такий підхід запобігає збоям програми через некоректні дані, що робить код надійнішим для реальних завдань веб-скрапінгу.
import requests
import json
url = 'https://httpbin.org/anything'
response = requests.get(url)
try:
data = response.json()
# Витяг конкретних даних з JSON-відповіді
headers = data['headers']
user_agent = headers.get('User-Agent', 'N/A')
origin = data.get('origin', 'N/A')
url = data.get('url', 'N/A')
print(f"User Agent: {user_agent}")
print(f"Origin: {origin}")
print(f"URL: {url}")
except json.JSONDecodeError:
print("Error decoding JSON response")
except KeyError as e:
print(f"Key error: {e} not found in the JSON response")
Використовуючи модуль json і описані практики, ви зможете ефективно збирати, аналізувати, записувати і налагоджувати JSON-дані. Це включає регулярне тестування коду, застосування відповідних інструментів і використання передових функцій Python для вдосконалення ваших умінь у роботі з JSON.
Це особливо важливо під час веб-скрапінгу, оскільки дані з веб-API зазвичай надаються саме в JSON форматі. Навички ефективного вилучення та маніпулювання JSON-даними дають змогу успішно обробляти інформацію з різноманітних веб-джерел.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Коментарі: 0