Как читать JSON-файл в Python

Как читать JSON-файл в Python?

Привет всем! Сегодня мы попробуем разобраться: что такое JSON и как читать JSON-файл в Python?

Для начала — немного фактов:

  • JSON расшифровывается как JavaScript Object Notation
  • Это формат обмена данными, в котором вы можете передавать данные с клиента на сервер и с сервера на клиент
  • Он также используется для связи между приложениями
  • JSON чрезвычайно важен для разработки приложений, особенно когда вы работаете с API Rest
  • Он основан на подмножестве Java Script
  • Это легко читать и писать

С теорией познакомились, а теперь узнаем основные правила синтаксиса при работе с JSON-форматом:

  • JSON использует пары ключ-значение — {«name»: «Вася»}
  • JSON использует двойные кавычки вокруг ключа

Обычно в обучалках рассказывают о коллективе с данными по зарплате, месту проживания и все такое прочее. Не будем нарушать традицию, и представим себе коллектив, состоящий из 5 сотрудников: Вася, Саша, Петя, Даша, Маша. Каждый сотрудник получает определенную зарплату, а значит — мы можем составить свой JSON-файл (назовем файл personal.json), который и будет представлять собой список сотрудников + их зарплату:

  1. {
  2.    "personal" :   [
  3.      {
  4.        "name" :   "Вася" ,
  5.        "salary" :   5000
  6.      } ,
  7.  
  8.      {
  9.        "name" :   "Саша" ,
  10.        "salary" :   6000
  11.      } ,
  12.  
  13.      {
  14.        "name" :   "Петя" ,
  15.        "salary" :   9000
  16.  
  17.      } ,
  18.  
  19.      {
  20.        "name" :   "Даша" ,
  21.        "salary" :   10000
  22.  
  23.      },
  24.  
  25.      {
  26.        "name" :   "Маша" ,
  27.        "salary" :   11000
  28.  
  29.      }
  30.    ]
  31.  }

как видно — поле name — отвечает за имя сотрудника, а поле salary — за уровень зарплаты, а вот само название этого массива данных — personal (указывается в самом верху). Файл с данными у нас есть, но как его читать? Для этого посмотрим на код ниже:

  1. import json #Подключаем библиотеку, отвечающую за работу с JSON
  2.  
  3. with open('personal.json', 'r', encoding='utf-8') as f: #открываем файл personal.json и указываем его кодировку - что бы можно было работать с русскими буквами
  4.     text = json.load(f) #загоняем в переменную все, что получилось в результате работы библиотеки
  5.     print(text) #выводим результат на экран

Если вы запустите код — то получите на экране нечто вроде:
{‘personal’: [{‘name’: ‘Вася’, ‘salary’: 5000}, {‘name’: ‘Саша’, ‘salary’: 6000}, {‘name’: ‘Петя’, ‘salary’: 9000}, {‘name’: ‘Даша’, ‘salary’: 10000}, {‘name’: ‘Маша’, ‘salary’: 11000}]}

Согласитесь — читать и разбирать подобные данные крайне сложно. Для упрощения работы в подобном случае часто используют библиотеку pprint, которая окультуривает выдачу в подобных случаях. В этом случае наш код будет выглядеть так:

  1. import json #подключили библиотеку для работы с json
  2. from pprint import pprint #подключили Pprint для красоты выдачи текста
  3.  
  4. with open('personal.json', 'r', encoding='utf-8') as f: #открыли файл с данными
  5.     text = json.load(f) #загнали все, что получилось в переменную
  6.     pprint(text) #вывели результат на экран

В результате выдача выглядит следующим образом:

  1. {'personal': [{'name': 'Вася', 'salary': 5000},
  2.               {'name': 'Саша', 'salary': 6000},
  3.               {'name': 'Петя', 'salary': 9000},
  4.               {'name': 'Даша', 'salary': 10000},
  5.               {'name': 'Маша', 'salary': 11000}]}

А теперь выведем данные в чистом виде — имя сотрудника + зарплата. Тогда код буде выглядеть так:

  1. import json #Подключили библиотеку
  2.  
  3. with open('personal.json', 'r', encoding='utf-8') as f: #открыли файл
  4.     text = json.load(f) #загнали все из файла в переменную
  5.     print(text) #вывели результат на экран
  6.  
  7. for txt in text['personal']: #создали цикл, который будет работать построчно
  8.     print(txt['name'], ':', txt['salary']) #и выводим на экран все, что в значении ключей name и salary

Собственно … можно было бы сказать что все, на сегодня хватит, но в завершении расскажу о том, как читать не файлы json, а строки. Например, у нас будет json-строка:
stroke = ‘{«food»: «banana»}’
Если мы попробуем вывести ее на экран, то получим:
{«food»: «banana»} — что в целом доносит суть, но не соответствует правилам 🙂 Для вывода json-строки используется функция loads. В виде кода это выглядит следующим образом:

  1. import json #подключаем библиотеку для работы с json
  2. stroke = '{"food": "banana"}' #json-строка
  3. stroke_s = json.loads(stroke) #загоняем в переменную результат чтения json-строки
  4. print(stroke_s) #выводим результат на экран

На этом — все 🙂 Спасибо за внимание! И да — как записывать в json-файл мы разберемся чуть позднее 🙂
Есть вопросы? Задавайте на почту, или пишите в Телеграм 🙂