Python как сохранить json

Функции json. Сохранение данных Python

Большинство программ запрашивают у пользователей информацию, например вводят личные данные, настройки игры и т.д. Когда пользователь закрывает программу или покидает ваше приложение, введенные данные лучше сохранить, чтобы пользователь не вводил их при каждом посещение. Простейший способ сохранения данных основан на использовании модуля json .

Содержание страницы:
1. Функции json.dump() и json.load()
2. Сохранение и чтение данных, сгенерированных пользователем

1. Функции json.dump() и json.load() в Python

Модуль json обеспечивает запись простых данных Python в файл и загружает данные из файла при следующем запуске программы. Формат данных json не привязан к Python, поэтому данные в этом формате могут передаваться программам, написанные на других языках программирования. Формат JSON(JavaScript Object Notation) был разработан для JavaScript, а после стал использоваться во многих языках программирования. Модуль json может использоваться для обмена данными между программами.

Приведем пример простой программы, которая сохраняет список чисел в память с помощью функции json.dump() и вторую программу, которая читает этот список c помощью функции json.load() обратно в память.

filename = ‘numbers.json’
with open (filename, ‘w’) as f :
json.dump (numbers, f )

В начале импортируем модуль json . Затем создаем список numbers. В переменной filename присваиваем название файла, в которым будем сохранять список. Обычно для таких файлов принято использовать расширение .json , указывающее что данные хранятся в формате JSON. Затем файл открывается в режиме записи ‘ w ‘. В конце функция json.dump() сохраняет список numbers в файле ‘numbers.json’.

Читайте также:  Проверка на кириллицу java

Данная программа ничего не выводит, но если открыть папку, в которой написана программа, то там появится файл numbers.json, внутри которого хранится наш список.

Теперь напишем вторую программу, которая читает список обратно в память с помощью функции json.load().

filename = ‘numbers.json’
with open (filename) as f :
numbers = json.load ( f )
print(numbers)

В начале импортируем модуль json . В переменной filename используем тот же файл, в который ранее были записаны данные ‘numbers.json’. Далее файл открываем в режиме чтения. Данные с помощью функции json.load() загружаются и сохраняются в переменную numbers и с помощью функции print выводятся на экран:

Модуль json позволяет организовать простейший обмен данными между программами.

2. Сохранение и чтение данных, сгенерированных пользователем на Python

При работе с данными, сгенерированными пользователем, можно использовать модуль json . Без сохранения информация о пользователе будет потеряна при остановке программы. Приведем пример программы, которая запрашивает у пользователя имя при первом запуске и выводит его при последующих запусках программы:

filename = ‘name.json’
with open (filename, ‘w’) as f :
json.dump (numbers, f )
print(f»Добро пожаловать на сайт !»)

В начале программа запрашивает имя пользователя с помощью функции input и сохраняет имя в переменной name. Далее открываем файл, находящийся в переменной filename в режиме записи ‘ w ‘ и с помощью функции json.dump() сохраняем имя пользователя в файле. Запустив эту программу, мы получим:

Введите ваше имя: Артур
Добро пожаловать на сайт Артур!

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

with open (filename) as f :
name = json.load ( f )
print(f»С возвращением !»)

Программа читает информация из файла ‘name.json’ и сохраняет в переменную name. После этого программы выводит приветствие на экран:

С возвращением Артур!

Теперь эти две программы можно объединить в одну. Когда программа будет запускаться, Python должен взять имя из файла, если это возможно, если файла ‘name.json’ не существует, запросить имя и сохранить на будущее. Так как в случае отсутствия файла будет возникать ошибка, воспользуемся блоком try-except.

filename = ‘name.json’
try:
with open (filename) as f :
name = json.load ( f )
except FileNotFoundError:
name = input («Введите ваше имя: «)
with open (filename, ‘w’) as f :
json.dump (numbers, f )
print(f»Добро пожаловать на сайт !»)
else:
print(f»С возвращением !»)

В начале программа пытается открыть файл ‘name.json’. Если файл существует и не возникает ошибка FileNotFoundError , то выводится сообщение из блока else. Если программа запускается впервые и файла не существует, возникает ошибка и пользователю предлагают ввести имя. При первом выполнение программы результат выглядит так:

Введите ваше имя: Жак
Добро пожаловать на сайт Жак!

Если программа была выполнена хоть один раз, то результат выглядит так:

С возвращением Жак!

Источник

Чтение и запись в файл JSON-объекта

Эта статья научит вас парсить данные из JSON. Также вы узнаете, как читать и записывать в файл данные JSON.

За последние 5-10 лет формат JSON был одним из самых популярных способов сериализации данных (если не самым популярным). Особенно в веб-разработке. С этим форматом вы столкнетесь при работе с REST API, конфигурациями приложений или базами данных.

Несомненно, знать принципы работы JSON — очень важно. В какой-то момент вы обязательно с ним встретитесь. Возможно, вы захотите узнать, как читать и записывать JSON в файл. Все эти действия — очень простые. В этом вы убедитесь, разобрав следующие примеры.

Запись JSON в файл

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

Во встроенной библиотеке json есть «волшебный» метод, который позволяет конвертировать словари в сериализованную JSON-строку.

import json data = <> data['people'] = [] data['people'].append(< 'name': 'Scott', 'website': 'pythonist.ru', 'from': 'Nebraska' >) data['people'].append(< 'name': 'Larry', 'website': 'pythonist.ru', 'from': 'Michigan' >) data['people'].append(< 'name': 'Tim', 'website': 'pythonist.ru', 'from': 'Alabama' >) with open('data.txt', 'w') as outfile: json.dump(data, outfile)

После импорта библиотеки json мы объявляем несколько словарей и наполняем их данными. Самая важная часть — в конце программы. Здесь мы используем оператор with , чтобы открыть файл. После этого мы используем метод json.dump , чтобы записать наши словари в файл.

Вторым аргументом может быть любой файлоподобный объект — даже если это не совсем файл. Например, сокет. Его можно открыть, закрыть и записать так же, как и файл. С подобным вариантом использования JSON вы точно столкнетесь — это важно запомнить.

Стоит упомянуть и о вариации метода json.dump — json.dumps . Этот метод позволяет вернуть JSON-строку, а не записывать ее в файл. Это может быть полезно, если вы хотите изменить JSON-строку. (например, зашифровать)

Чтение JSON из файла

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

import json with open('data.txt') as json_file: data = json.load(json_file) for p in data['people']: print('Name: ' + p['name']) print('Website: ' + p['website']) print('From: ' + p['from']) print('')

json.load — очень важный метод, запомните его. С его помощью происходит чтение файла, парс JSON-данных. После этого все данные записываются в словарь и возвращаются вам.

Как и у json.dump , у json.load есть дополнительный метод. Он позволяет работать со строками напрямую, ведь чаще всего у вас не будет файлоподобного объекта, содержащего JSON. Как вы уже догадались, называется он json.loads . Допустим, вы вызываете конечную точку REST с помощью GET, который возвращает строку. Ее мы и можем напрямую передать в json.loads .

Параметры

При сериализации данных в JSON могут возникнуть проблемы. Например, его будет не очень удобно читать, ведь удаляются все пробелы. В большинстве случаев этот вариант вполне хорош, но порой нужно внести небольшие изменения. К примеру, добавить пробелы, чтобы JSON было удобнее читать. У json.load и json.dump есть несколько параметров, которые дают необходимую гибкость. О некоторых из них мы и поговорим.

Pretty-Printing

Сделать JSON более удобочитаемым (pretty-printing) — очень просто. Нужно лишь передать целое число в параметр indent :

import json data = <'people':[<'name': 'Scott', 'website': 'pythonist.ru', 'from': 'Nebraska'>]> json.dumps(data, indent=4) < "people": [ < "website": "pythonist.ru", "from": "Nebraska", "name": "Scott" >] >

Это довольно полезно. Особенно если вам часто приходится читать JSON во время работы. Также вы можете использовать использовать команду json.tool прямо в командной строке. Если вы хотите удобочитаемый JSON, наберите в командной строке следующий код:

Сортировка

В JSON объект определяется следующим образом:

Объект — это неупорядоченный набор пар ключ/значение.

То есть, порядок не гарантируется. Но навести его реально. Сделать это можно с помощью передачи True в параметр sort_keys в методах json.dump или json.dumps .

import json data = <'people':[<'name': 'Scott', 'website': 'pythonist.ru', 'from': 'Nebraska'>]> json.dumps(data, sort_keys=True, indent=4) < "people": [ < "from": "Nebraska", "name": "Scott", "website": "pythonist.ru" >] >

ASCII-текст

По умолчанию json.dump проверяет, имеет ли ваш текст в словаре кодировку ASCII. Если присутствуют символы, отличные от ASCII, они автоматически экранируются. Это показано в следующем примере:

import json data = jstr = json.dumps(data, indent=4) print(jstr)

Но это не всегда приемлемо. Во многих случаях вы бы хотели сохранить символы Unicode нетронутыми. Для этого нужно передать в параметр ensure_ascii значение False .

jstr = json.dumps(data, ensure_ascii=False, indent=4) print(jstr)

Источник

Оцените статью