Что найти?

Чтение и запись данных в файл в JSON Python

/
/

В этой статье мы будем анализировать, читать и записывать данные JSON в файл на Python.

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

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

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

Самый простой способ записать данные в формате JSON в файл с помощью Python – использовать хранилище данных в объекте dict, который может содержать другие вложенные dicts, массивы, логические значения или другие примитивные типы, такие как целые числа и строки.

Встроенный пакет json имеет код, который преобразует объект dict в Python в сериализованную строку JSON.

import json

data = {}
data['people'] = []
data['people'].append({
    'name': 'Dronov',
    'website': 'tonais.ru',
    'from': 'SPB'
})
data['people'].append({
    'name': 'Larry',
    'website': 'google.com',
    'from': 'Michigan'
})
data['people'].append({
    'name': 'Tim',
    'website': 'apple.com',
    'from': 'Alabama'
})

with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)

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

Любой файловый объект может быть передан второму аргументу, даже если это не настоящий файл. Хорошим примером этого может быть сокет, который можно открывать, закрывать и записывать во многом как файл. Поскольку 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, заполняет dict данными и возвращает их вам.

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

Опции

При сериализации ваших данных в JSON с помощью Python результат будет в стандартном формате и не очень удобочитаемым, так как пробелы удаляются. Хотя это идеальное поведение для большинства случаев, иногда вам может потребоваться внести небольшие изменения, например добавить пробелы, чтобы сделать его удобочитаемым. И json.dump, и json.load предоставляют несколько вариантов для большей гибкости.

Довольно-полиграфический

Сделать JSON удобочитаемым так же просто, как передать целочисленное значение для параметра indent:

>>> import json
>>> data = {'people':[{'name': 'Dronov', 'website': 'tonais.ru', 'from': 'SPB'}]}
>>> json.dumps(data, indent=4)
{
    "people": [
        {
            "website": "tonais.ru", 
            "from": "SPB", 
            "name": "Dronov"
        }
    ]
}

На самом деле это очень полезно, поскольку вам часто придется читать данные JSON во время разработки. Другой вариант – использовать инструмент командной строки json.tool. Итак, если вы просто хотите распечатать JSON в командной строке, вы можете сделать что-то вроде этого:

$ echo '{"people":[{"name":"Dronov", "website":"tonais.ru", "from":"SPB"}]}' | python -m json.tool
{
    "people": [
        {
            "name": "Dronov",
            "website": "tonais.ru"
            "from": "SPB",
        }
    ]
}
Сортировка

В JSON объект определяется как:

Объект – это неупорядоченный набор пар имя:значение.

Порядок ключей не гарантируется, но возможно, что он вам может понадобиться для ваших внутренних целей. Чтобы добиться упорядочения, вы можете передать True параметру sort_keys при использовании json.dump или json.dumps.

>>> import json
>>> data = {'people':[{'name': 'Dronov', 'website': 'tonais.ru', 'from': 'SPB'}]}
>>> json.dumps(data, sort_keys=True, indent=4)
{
    "people": [
        {
            "from": "SPB",
            "name": "Dronov",
            "website": "tonais.ru"
        }
    ]
}
Текст ASCII

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

>>> import json
>>> data = {'item': 'Beer', 'cost':'£4.00'}
>>> jstr = json.dumps(data, indent=4)
>>> print(jstr)
{
    "item": "Beer",
    "cost": "\u00a34.00"
}

Это не всегда приемлемо, и во многих случаях вы можете не трогать символы Unicode. Для этого установите для параметра sure_ascii значение False.

>>> jstr = json.dumps(data, ensure_ascii=False, indent=4)
>>> print(jstr)
{
    "item": "Beer",
    "cost": "£4.00"
}

В этой статье мы познакомили вас с методами json.dump, json.dumps, json.load и json.loads, которые помогают в сериализации и десериализации строк JSON.

Поскольку JSON стал одним из самых популярных способов сериализации структурированных данных, вам, вероятно, придется довольно часто взаимодействовать с ним, особенно при работе с веб-приложениями. Модуль json – отличный способ начать работу, хотя, simplejson – еще одна отличная альтернатива, которая намного менее строга в отношении синтаксиса JSON.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

This div height required for enabling the sticky sidebar