JSON (нотация объектов JavaScript) — это облегченный формат обмена данными, основанный на языке JavaScript. Он использует пары ключ-значение для представления различных типов данных, включая строки, числа, логические значения, нулевые значения, массивы и объекты. Массивы представляют собой упорядоченные коллекции данных, окруженные [], а элементы разделяются запятыми; объекты — это неупорядоченные коллекции данных, окруженные {}, атрибуты разделяются запятыми, а имена атрибутов и значения атрибутов разделяются двоеточиями.
JSON может формировать вложенные структуры, где массивы или объекты содержат другие массивы или объекты. Например:
{
"name": "Alice",
"age": 20,
"hobbies": ["reading", "writing", "singing"],
"friends": [
{
"name": "Bob",
"age": 21,
"hobbies": ["playing", "coding", "dancing"]
},
{
"name": "Charlie",
"age": 19,
"hobbies": ["drawing", "cooking", "watching"]
}
]
}
В этом примере объект представляет основную информацию об Алисе и двух ее друзьях. Этот объект имеет четыре свойства, из которых хобби — это массив, друзья — тоже массив, а каждый элемент массива друзей — объект.
Обход JSON заключается в доступе к каждому элементу или атрибуту по порядку и его обработке. Обход JSON имеет множество преимуществ:
● Извлечение необходимой информации: мы можем получить конкретную информацию из вложенной структуры JSON, например, какие книги нравятся Алисе, умеет ли Боб танцевать и т. д.
● Изменить или обновить информацию: мы можем изменить или обновить определенную информацию во вложенной структуре JSON, например, возраст Алисы увеличился на 1 или у Чарли появилось еще одно хобби и т. д.
● Форматирование или преобразование информации. Мы можем отображать пользователям вложенную структуру JSON в различных формах, таких как таблицы, диаграммы, списки и т. д.
Или конвертируйте в другие форматы, такие как XML, CSV и т. д.
● Анализировать или обрабатывать информацию. Мы можем анализировать или обрабатывать конкретную информацию во вложенной структуре JSON, например подсчитывать количество общих хобби у Алисы и Боба или сортировать всех по возрасту и т. д.
Следующий код демонстрирует, как пройти JSON, извлечь все ссылки на веб-сайт и использовать IP-адрес прокси-сервера сканера для загрузки zip-файла:
# Импортируйте необходимые модули
import json
import requests
# Определите имя пользователя, пароль, имя домена и порт расширенной версии агента сканера.
proxy = "http://16ip:pass@www.16yun.cn:8080"
# Определите json-данные вложенной структуры, которые можно заменить чтением файла и т. д.
data = {
"articles": {
"article_1": {
"image": "https://www.16yun.cn/1.jpg",
"reviews": [
{
"attach": "https://www.16yun.cn/test/22.png"
},
{
"attaches": [
"https://exa2.com/test/23.png",
"https://exm23.com/file.zip"
],
"report_to": "https://data.zzz/count_re"
}
]
},
"article_2": {
"image": "https://example.com/3.jpg",
"related_posts": [
{
"attach": [
"https://exmdy.com/79488.png",
"https://exmdy.com/file/da/eio.zip"
],
report_to: \"https://dafe/do\"
}
]
}
}
}
# Определите функцию для просмотра данных json, извлечения всех ссылок и загрузки файлов с суффиксом .zip в ссылках, используя IP-адрес прокси-сервера.
def extract_and_download_links(data):
# Если данные относятся к словарному типу, переберите их пары ключ-значение.
if isinstance(data, dict):
for key, value in data.items():
# Если значение имеет строковый тип и начинается с http или https, это означает, что это ссылка.
if isinstance(value, str) and value.startswith(("http", \"https\")):
# распечатать ссылку
print(value)
# Если ссылка заканчивается на .zip, это означает, что это сжатый файл.
if value.endswith(".zip"):
# Используйте модуль запросов и расширенную версию сканера для отправки запросов и получения содержимого ответов.
response = requests.get(value, proxies={"http": proxy})
# Извлечь имя файла из ссылки
filename = value.split("/")[-1]
# Откройте новый файл в двоичном режиме и напишите содержимое ответа.
with open(filename, \"wb\") as f:
f.write(response.content)
# В противном случае вызовите функцию рекурсивно для обработки значения.
else:
extract_and_download_links(value)
# Если данные представляют собой тип списка, переберите его элементы.
elif isinstance(data, list):
for element in data:
# Рекурсивный вызов функции для обработки элементов
extract_and_download_links(element)
# Вызов функции для обработки данных JSON
extract_and_download_links(data)
Короче говоря, обход вложенной структуры JSON может помочь нам лучше понять и использовать содержащиеся в нем данные, а также предоставить больше возможностей и гибкости для удовлетворения потребностей различных сценариев.