Хотите узнать, как анализировать JSON в Python? Вы не одиноки. С этим руководством чтение, запись и анализ кода станут проще простого.
В этом кратком руководстве мы рассмотрим основы синтаксического анализа в Python, объясним, что такое JSON, и расскажем, как использовать оба этих метода для получения нужных данных.
Что такое синтаксический анализ?
Синтаксический анализ — это процесс преобразования последовательности символов в дерево абстрактного синтаксиса. Затем синтаксический анализатор использует это дерево для выполнения различных операций над входными данными, таких как проверка синтаксической правильности или определение наличия ошибок во входных данных.
Наиболее распространённый тип синтаксического анализатора называется лексером, который преобразует последовательности символов в лексемы (или «лексемы»). Лексемой может быть всё, что имеет значение в вашем языке: это может быть идентификатор, литеральная строка, такая как «hello», или даже что-то более сложное, например вызов функции.
После того как вы преобразовали все лексемы в токены, вам нужно решить, что с ними должно произойти после их обработки программой. Это решение зависит от того, как устроен ваш язык. В некоторых языках отсутствует понятие функций; в других могут использоваться рекурсия и функции высшего порядка; в третьих — замыкания или анонимные пространства имён и т. д.
Кроме того, следует убедиться, что каждый токен содержит не более одного символа, чтобы случайно не создать бесконечный цикл при разборе.
Что такое JSON?
JavaScript Object Notation (JSON) — это облегченный формат обмена данными, который описывает объекты с помощью пар «атрибут-значение» для хранения или передачи данных. Например, предположим, что на вашем веб-сайте есть глоссарий. В JSON он описывается с помощью строки: «title» : «пример глоссария»
Каковы основные типы файлов JSON?
Существует два основных типа файлов JSON: «object» и «array». «Object» — это простой способ хранения данных любого типа, а «array» используется для хранения объектов, содержащих другие объекты.
В чём заключаются преимущества использования JSON?
Главное преимущество использования JSON по сравнению с XML или другими форматами, такими как CSV или HTML, заключается в том, что вам не нужно заботиться о написании специального кода для разбора данных в вашем приложении. При использовании JSON необходимо разместить файл с данными в нужном месте на странице, а затем считывать данные оттуда. Это означает, что независимо от того, какое устройство использует посетитель для просмотра вашего сайта, он всегда получит именно то, что вы для него предусмотрели.
Что такое Python?
Python — это язык программирования общего назначения, который можно использовать для реализации самых разных проектов. Он прост в освоении и располагает обширным набором библиотек, которые значительно упрощают работу.
Кроме того, вокруг Python сформировалось активное сообщество, а это значит, что в Интернете можно найти множество ресурсов, которые помогут вам начать работу.
Что такое строка?
Строка — это последовательность символов. Символы — это знаки, такие как буквы или цифры. Таким образом, с технической точки зрения, это предложение является строкой.
Но компьютеры не распознают букв или символов. Они распознают только единицы и нули — «включено» и «выключено», либо одно, либо другое; другими словами — двоичную систему счисления.
Несмотря на то что на экране компьютера вы видите символы, «за кулисами» компьютер преобразует или кодирует эти символы в единицы и нули. Обратный процесс (преобразование двоичного кода в символы) называется декодированием.
Проще говоря, строка в Python — это последовательность символов, которая преобразует команды человека в двоичный язык, понятный компьютерам.
Что такое модули в Python?
Модули разбивают большие программы на небольшие, удобные для работы и упорядоченные файлы. В Python под модулями понимаются файлы, содержащие операторы и определения языка Python. Файл, содержащий код Python, например example.py, является модулем. Имя этого модуля — «example».
Как анализировать JSON в Python.
Для работы с JSON (строкой или файлом, содержащим объект JSON) можно использовать модуль JSON языка Python. Рекомендуется импортировать этот модуль перед его использованием.
Импорт JSON
Модуль JSON упрощает анализ строк JSON и файлов, содержащих объекты JSON.
Существует множество способов извлечь одну и ту же информацию из строки, оформленной в формате JSON (или в любом другом формате).
Самый простой способ — использовать встроенную функцию «json». Она принимает необязательный параметр «indent», который определяет величину отступа при разборе входных данных.
Если значение равно None, то отступы не будут добавляться. В противном случае перед каждой новой строкой кода будет добавлен как минимум один пробел.
Этот подход хорошо подходит для простых случаев, когда нужно извлечь только одно значение из списка значений или одну пару «ключ-значение» из структуры словаря.
Но что делать, если вам нужно извлечь несколько значений из одной и той же структуры или преобразовать строку JSON в словарь Python, содержащий вложенные структуры? В таких случаях лучше использовать метод «json.loads».
Метод json.loads
import json
person = '{"name": "Steve", "languages": ["English", "French"]}'
person_dict = json.loads(person)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print( person_dict)
# Output: ['English', 'French']
print(person_dict['languages'])
Здесь «person» — это строка в формате JSON, а person_dict — словарь.
Этот код вернет все ключи и значения входных данных в виде словарей. Если ключ отсутствует, для данной пары «ключ-значение» будет возвращено значение `None`. Значение, связанное с каждой парой «ключ-значение», определяется путем поиска записи в словаре по имени ключа.
Python: чтение файла JSON
Для чтения файла, содержащего объект JSON, можно использовать метод json.load.
{"name": "Steve",
"languages": ["English", "French"]
}
Вот как можно проанализировать этот файл:
import json
with open('path_to_file/person.json', 'r') as f:
data = json.load(f)
# Output: {'name': 'Steve', 'languages': ['English', 'French']}
print(data)
Преобразовать Python в строку JSON
С помощью метода json.dumps можно преобразовать словарь в строку JSON.
import json
person_dict = {'name': 'Bob',
'age': 12,
'children': None
}
person_json = json.dumps(person_dict)
# Output: {"name": "Bob", "age": 12, "children": null}
print(person_json)
Запись JSON в файл
Чтобы записать JSON в файл в Python, можно использовать метод json.dump().
import json
person_dict = {"name": "Steve",
"languages": ["English", "French"],
"married": False,
"age": 33
}
with open('person.txt', 'w') as json_file:
json.dump(person_dict, json_file)
В приведённой выше программе мы открыли файл с именем person.txt в режиме записи с помощью оператора «w.». Если файл ещё не существует, он будет создан. Затем функция json.dump преобразует person_dict в строку JSON, которая сохраняется в файле person.txt.
При запуске программы создаётся файл person.txt. Внутри этого файла находится следующий текст.
{"name": "Steve", "languages": ["English", "French"], "married": false, "age": 33}
Оформление JSON-данных в Python
Для анализа и отладки данных JSON может потребоваться вывести их в более удобном для чтения формате. Это можно сделать, передав дополнительные параметры indent и sort_keys в json.dumps и метод json.dump.
import json
person_string = '{"name": "Bob", "languages": "English", "numbers": [2, 1.6, null]}'
# Getting dictionary
person_dict = json.loads(person_string)
# Pretty Printing JSON string back
print(json.dumps(person_dict, indent = 4, sort_keys=True))
При запуске программы на экране появится следующий вывод:
{
"languages": "English",
"name": "Bob",
"numbers": [
2,
1.6,
null
]
}
В приведенной выше программе мы использовали четыре пробела для отступа, а ключи отсортированы по возрастанию.
Кстати, значение по умолчанию для параметра indent — None, а для параметра sort_keys — False.
Если эта тема кажется вам слишком сложной, мы предлагаем отличное и понятное введение в веб-парсинг. Если же вам нужны ротационные прокси-серверы для частных пользователей, чтобы обеспечить бесперебойный сбор данных, свяжитесь с нашей командой для получения подробной информации или ознакомьтесь с нашими комплексными ежемесячными пакетами.
Вопросы и ответы
Кто создал JSON?
Дуглас Крокфорд создал его в 1999 году в качестве альтернативы XML.
Что такое синтаксическое дерево?
Синтаксическое дерево наглядно отображает структуру языка. Оно разбивает речь на составные части предложения, как правило, не учитывая контекст.
Как прочитать локальный файл JSON в Python?
Сначала импортируйте модуль json, а затем откройте файл с именем json-файла с помощью функции open(). Затем прочитайте json-файл с помощью функции load() и поместите данные json в переменную.
