Как разобрать JSON в Python

Вы задаетесь вопросом, как разобрать JSON на языке Python? Вы не одиноки. Это руководство превращает чтение, запись и разбор в кусок кода, э-э-э, в пирог.

В этом кратком руководстве мы рассмотрим основы парсинга в python, объясним, что такое JSON, и как использовать их оба для получения нужных данных.

Что такое синтаксический анализ?

Парсинг - это процесс преобразования последовательности символов в абстрактное синтаксическое дерево. Затем синтаксический анализатор использует это дерево для выполнения различных операций над вводом, таких как проверка синтаксической корректности или определение наличия ошибок во вводе.

Json Парсинг с нуля в Haskell | Abhinavsarkar.net

Наиболее распространенный тип синтаксического анализатора называется лексером, который преобразует последовательности символов в лексемы (или "лексемы"). Токеном может быть все, что имеет значение для вашего языка: это может быть идентификатор, буквенная строка типа "hello" или даже что-то более сложное, например вызов функции. 

После преобразования всех лексем в лексемы необходимо решить, что с ними будет происходить после того, как программа их обработает. Это решение зависит от того, как устроен ваш язык. В одних языках нет понятия функций, в других может использоваться рекурсия и функции высшего порядка, в третьих - замыкания или анонимные пространства имен и т.д. 

Также необходимо убедиться, что каждый токен не содержит более одного символа, чтобы случайно не создать бесконечный цикл при разборе.

Что такое JSON?

JavaScript Object Notation is a lightweight data-interchange format that describes objects – via attribute/value pairs – for data storage or transport. For example, let’s say you have a glossary on your website. JSON uses a string to define it. “title” : “example glossary”

Каковы основные типы JSON-файлов?

Существует два основных типа файлов JSON: object и Array. Object - это простой способ хранения данных любого типа, в то время как Array используется для хранения объектов, содержащих другие объекты. 

Каковы преимущества использования JSON?

Основное преимущество использования JSON по сравнению с XML или другими форматами, такими как CSV или HTML, заключается в том, что вам не нужно заботиться о специальном коде синтаксического анализа в вашем приложении. При использовании JSON необходимо поместить файл с данными в нужное место на странице, а затем считывать их оттуда. Это означает, что независимо от того, с помощью какого устройства человек просматривает ваш сайт, он всегда получит именно то, что задумал.  

Что такое Python?

Python - это язык программирования общего назначения, который можно использовать для различных типов проектов. Он прост в изучении и имеет множество библиотек, облегчающих работу.  

Кроме того, вокруг Python активно развивается сообщество, а это значит, что в Интернете есть множество ресурсов, которые помогут вам начать работу.

Что такое строка? 

Строка - это последовательность символов. Символы - это символы, например, буквы или цифры. Таким образом, технически это предложение является строкой

Но компьютеры не читают символы и знаки. Они читают только 1 и 0 - " вкл " и " выкл", "либо" и "либо"; другими словами - двоичный код. 

Несмотря на то, что вы видите символы на экране компьютера, за кулисами компьютер преобразует или кодирует их в 1 и 0. Обратный процесс (преобразование двоичных данных в символы) называется декодированием. 

Проще говоря, строка Python - это последовательность символов, преобразующая человеческие команды в двоичный язык, понятный компьютерам. 

Что такое модули в языке Python? 

Модули разбивают большие программы на небольшие управляемые, организованные файлы. В языке Python они относятся к файлам, содержащим операторы и определения языка Python. Например, файл, содержащий код на языке Python, такой как example.py, является модулем. Имя его модуля будет 'example'. 

Как разобрать JSON на языке Python.

Для работы с JSON (строкой или файлом, содержащим объект JSON) можно использовать модуль Python JSON. Это поможет, если вы импортируете модуль перед его использованием.

Импорт 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. Значение, связанное с каждой парой ключ/значение, определяется путем поиска словарной статьи по ее имени.

Чтение JSON-файла в Python

Для чтения файла, содержащего 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 можно с помощью метода json.dumps.

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} 

Python Pretty Print JSON

Для анализа и отладки 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-данные в переменную.

In this Article:
Leave behind the complexities of web scraping.
Opt for IPBurger’s advanced web intelligence solutions to effortlessly collect real-time public data.
Зарегистрироваться

Еще глубже погрузиться в тему

Прокси-серверы
Эй Джей Тейт
The Best Rayobyte Alternative for Ethical, Scalable and High-Performance Proxies

Why More Users Are Searching for a Rayobyte Alternative Rayobyte has earned its place as a respected proxy provider, offering datacenter, ISP, and residential proxies to businesses and individuals needing bulk IPs. With competitive pricing and a variety of proxy types, it’s been a go-to choice for many in web

Прокси-серверы
Эй Джей Тейт
The Best Storm Proxies Alternative: Faster, Safer & More Affordable Proxies

Looking for a Storm Proxies Alternative? Storm Proxies sells the dream: simple, affordable proxies that “just work.” And for some users? It kind of delivers. Until it doesn’t. Because here’s the reality—if you’re pulling small data sets, running light scraping jobs, or dipping your toes into sneaker copping, Storm Proxies

Прокси-серверы
Эй Джей Тейт
The Best IPRoyal Alternative for Power, Control & Price

Outgrowing IPRoyal? Here’s the Smarter Alternative If you’ve been using IPRoyal, chances are it was for one simple reason—it’s cheap. And in the world of proxies, “cheap” can be enough to get you started. But here’s the thing about IPRoyal: it’s a gateway, not a long-term solution. At first, it

Scale Your Business
With The Most Advanced
Proxies On Earth
Присоединяйтесь к удостоенной наград прокси-сети №1