Working with json data in python

🔹 Введение: Что такое JSON?

Формат JSON изначально был вдохновлен синтаксисом JavaScript (язык программирования, используемый для веб-разработки). Но с тех пор он стал Независимый от языка формат данных И большинство языков программирования, которые мы используем сегодня, могут генерировать и читать JSON.

Важность и использование случаев Json

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

Посмотрим, почему:

Разработка веб: JSON обычно используется для отправки данных с сервера клиенту и наоборот в веб-приложениях.

Файлы конфигурации: JSON также используется для хранения конфигураций и настроек. Например, чтобы создать Google Chrome App , вам нужно включить файл JSON под названием манифест .json Чтобы указать имя приложения, его описание, текущую версию и другие свойства и настройки.

Encoders and Decoders¶

class (*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)

Simple JSON decoder.

Performs the following translations in decoding by default:

JSON

Python

object

dict

array

list

string

str

number (int)

int

number (real)

float

true

True

false

False

null

None

It also understands , , and as their
corresponding values, which is outside the JSON spec.

object_hook, if specified, will be called with the result of every JSON
object decoded and its return value will be used in place of the given
. This can be used to provide custom deserializations (e.g. to
support JSON-RPC class hinting).

object_pairs_hook, if specified will be called with the result of every
JSON object decoded with an ordered list of pairs. The return value of
object_pairs_hook will be used instead of the . This
feature can be used to implement custom decoders. If object_hook is also
defined, the object_pairs_hook takes priority.

Changed in version 3.1: Added support for object_pairs_hook.

parse_float, if specified, will be called with the string of every JSON
float to be decoded. By default, this is equivalent to .
This can be used to use another datatype or parser for JSON floats
(e.g. ).

parse_int, if specified, will be called with the string of every JSON int
to be decoded. By default, this is equivalent to . This can
be used to use another datatype or parser for JSON integers
(e.g. ).

parse_constant, if specified, will be called with one of the following
strings: , , .
This can be used to raise an exception if invalid JSON numbers
are encountered.

If strict is false ( is the default), then control characters
will be allowed inside strings. Control characters in this context are
those with character codes in the 0–31 range, including (tab),
, and .

If the data being deserialized is not a valid JSON document, a
will be raised.

Changed in version 3.6: All parameters are now .

(s)

Return the Python representation of s (a instance
containing a JSON document).

will be raised if the given JSON document is not
valid.

(s)

Decode a JSON document from s (a beginning with a
JSON document) and return a 2-tuple of the Python representation
and the index in s where the document ended.

This can be used to decode a JSON document from a string that may have
extraneous data at the end.

Опции

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

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

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

>>> import json
>>> data = {'people':}
>>> json.dumps(data, indent=4)
{
    "people": 
}

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

$ echo '{"people":}' | python -m json.tool
{
    "people": 
}
Сортировка

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

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

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

>>> import json
>>> data = {'people':}
>>> json.dumps(data, sort_keys=True, indent=4)
{
    "people": 
}
Текст 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.

Использование метода json.dumps ()

Команда пишет в формате строки JSON, поэтому я код и передаю его в переменной, которую мы тогда будем печатать, чтобы увидеть, как это выглядит.

import json

employees_dict = {'employees' : ,
    'contractors' : 
    }

employees_json = json.dumps(employees_dict, indent=4)

print(employees_json)


# Results

{
    "employees": ,
    "contractors": 
}

Process finished with exit code 0

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

Convert from Python to JSON

If you have a Python object, you can convert it into a JSON string by
using the method
.

Example

Convert from Python to JSON:

import json# a Python object (dict):x = {  «name»:
«John»,  «age»: 30,  «city»: «New York»}#
convert into JSON:y = json.dumps(x)# the result is a JSON string:
print(y)

You can convert Python objects of the following types, into JSON strings:

  • dict
  • list
  • tuple
  • string
  • int
  • float
  • True
  • False
  • None

Example

Convert Python objects into JSON strings, and print the values:

import jsonprint(json.dumps({«name»: «John», «age»: 30}))print(json.dumps())print(json.dumps((«apple», «bananas»)))
print(json.dumps(«hello»))print(json.dumps(42))print(json.dumps(31.76))print(json.dumps(True))print(json.dumps(False))print(json.dumps(None))

When you convert from Python to JSON, Python objects are converted into the JSON (JavaScript) equivalent:

Python JSON
dict Object
list Array
tuple Array
str String
int Number
float Number
True true
False false
None null

Example

Convert a Python object containing all the legal data types:

import jsonx = {  «name»:
«John»,  «age»: 30,  «married»: True, 
«divorced»: False,  «children»: («Ann»,»Billy»),  «pets»:
None,  «cars»:
}print(json.dumps(x))

json.dumps() – Создание объекта JSON

Мы можем закодировать объект Python в объект JSON с помощью метода .

Вы можете думать о как о сериализации объекта Python в объект Python JSON и возврате строки. Это необходимо, если вы хотите передавать данные через Интернет.

Закодированные данные указаны в таблице ниже для различных объектов Python.

объект дикт
массив список, кортеж
строка ул
номер перечисления, производные от int, float, int– и float
истинный Правда
ложный Ложный
нулевой Никто

Это принимает любой объект Python, который может быть сериализован в качестве аргумента, и возвращает строку.

Формат:

json_object = json.dumps(serializable_object)

Здесь – это объект Python, такой как список, строка и т. Д., Который Может быть сериализуемым. Это не может быть функция/лямбда и т. Д.

import json

python_object = 

json_object = json.dumps(python_object)

print(type(json_object), json_object)

Выход

Этот метод вызовет если объект не сериализуем.

>>> import json
>>> a = lambda x : x * 2
>>> a(2)
4
>>> json.dumps(a)
Traceback (most recent call last):
    raise TypeError(f'Object of type {o.__class__.__name__}
TypeError: Object of type function is not JSON serializable

Сортировка ключей словаря

Если мы передаем словарь Python в , мы можем указать другой параметр , который сделает объект Python json отсортированным по ключам.

import json

dict_obj = {1:"one", 20: "twenty", 5:"five"}

json_obj = json.dumps(dict_obj, sort_keys = True)

print(json_obj)

Выход

{"1": "one", "5": "five", "20": "twenty"}

Наш вывод действительно имеет отсортированные ключи.

ПРИМЕЧАНИЕ : числа преобразуются в строки, так как они закодированы в JSON. Он будет правильно десериализован обратно в целые числа при использовании соответствующих методов.

Довольно печать объектов Python JSON

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

import json

dict_obj = {1:"one", 20: "twenty", 5:"five"}

json_obj = json.dumps(dict_obj, sort_keys = True, indent = 4)

print(json_obj)

Выход

{
    "1": "one",
    "5": "five",
    "20": "twenty"
}

json.dump() – Дамп в файл

Мы также можем сбросить объект в файл, если вы хотите использовать его позже, используя другой метод .

Формат :

json.dump(data, file_object)

Метод принимает данные и записывает их в файловый объект.

Таким образом, вы можете открыть новый файл и записать в этот файл объект с помощью

import json

python_object = 

with open("sample.json", "w") as wf:
    json.dump(python_object, wf)

Выход

user@AskPython $ cat sample.json

Как вы можете видеть, объект Python действительно был сброшен в файл.

Теперь давайте возьмем объект JSON, который мы показали в первом примере, и сохраним его в файл.

import json

json_object = {
    "name": "John",
    "age": 42,
    "married": True,
    "qualifications": 
}

with open("sample.json", "w") as wf:
    json.dump(json_object, wf)

Выход

user@AskPython $ cat sample.json
{"name": "John", "age": 42, "married": true, "qualifications": }

Convert dictionary to JSON using sort_keys Python

Now, we can see how to convert dictionary to JSON using sort_keys in python.

  • In this example, I have imported a module called json, and declared a variable called the dictionary, and assigned key and value pair.
  • To store the value I have used json.dumps and also indent = 5 is used. The sort_keys = true is used to sort the dictionary, if we give False to the value, then the dictionary will not be sorted.

Example:

We can see the sorted dictionary as the output in the below screenshot.

Convert dictionary to JSON using sort_keys python

This is how to convert dictionary to JSON using sort_keys in Python.

You may like the following Python tutorials:

  • How to attach an image in Turtle Python
  • Check if a list exists in another list Python
  • Python write a list to CSV
  • Python Tkinter ToDo List
  • Python Tkinter Window Size
  • How to write Python array to CSV
  • Python shape of an array
  • Python save an image to file
  • How to Create Date Time Picker using Python Tkinter
  • Python Pygame tutorial

In this tutorial, we have learned about how Convert dictionary to JSON in Python, and also we have covered these topics:

  • Convert nested dictionary to JSON python
  • Convert dictionary to JSON string python
  • Convert dictionary to JSON file python
  • Python dictionary to JSON quotes
  • Convert dictionary to JSON array in python
  • Convert multiple dictionaries to JSON python
  • Convert dictionary to JSON using sort_key python

Python to JSON (Encoding)

JSON Library of Python performs following translation of Python objects into JSON objects by default

Python JSON
dict Object
list Array
unicode String
number — int, long number – int
float number – real
True True
False False
None Null

Converting Python data to JSON is called an Encoding operation. Encoding is done with the help of JSON library method – dumps()

JSON dumps() in Python

json.dumps() in Python is a method that converts dictionary objects of Python into JSON string data format. It is useful when the objects are required to be in string format for the operations like parsing, printing, etc.

Now lets perform our first json.dumps encoding example with Python:

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ,
  "cars": 
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)

Output:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Let’s see an example of Python write JSON to file for creating a JSON file of the dictionary using the same function dump()

# here we create new data_file.json file with write mode using file i/o operation 
with open('json_file.json', "w") as file_write:
# write json data into file
json.dump(person_data, file_write)

Output:

Nothing to show…In your system json_file.json is created. You can check that file as shown in the below write JSON to file Python example.

Packaging

This is an example for the x86_64-unknown-linux-gnu target:

RUSTFLAGS="-C target-cpu=k8" maturin build --no-sdist --release --strip

The explicit enables SSE2 on amd64. aarch64 does not need any
specified.

The project’s own CI tests against . It is prudent to
pin this version because Rust nightly can introduce breaking changes.

orjson is tested for amd64 and aarch64 on Linux and amd64 on macOS and
Windows. It may not work on 32-bit targets.

There are no runtime dependencies other than libc.

orjson’s tests are included in the source distribution on PyPI. The
requirements to run the tests are specified in . The
tests should be run as part of the build. It can be run with
.

Создайте свой собственный кодер JSON

Модуль использует кодер под названием , который использует правила в приведенной выше таблице для кодирования объектов Python.

Однако он не кодирует все объекты Python, и в зависимости от проблемы, с которой мы сталкиваемся, нам может потребоваться написать наш собственный кодер JSON, чтобы кодировать эти объекты особым образом.

Для этого мы должны написать свой собственный класс кодировщика. Давайте назовем его . Это должно расширить класс , чтобы добавить к его существующим функциям.

Для этой демонстрации мы возьмем массивы numpy и преобразуем их в объекты Python JSON. Теперь модуль json по умолчанию не может обрабатывать массивы numpy, поэтому, если вы попытаетесь преобразовать массив numpy без нашего расширенного класса, вы получите ошибку типа:

TypeError: Object of type ndarray is not JSON serializable

Давайте напишем этот класс для сериализации и кодирования массива numpy в объекты json, а также путем преобразования его в список Python в нашем методе handler.

import json
import numpy as np

class MyEncoder(json.JSONEncoder):
    # Handles the default behavior of
    # the encoder when it parses an object 'obj'
    def default(self, obj):
        # If the object is a numpy array
        if isinstance(obj, np.ndarray):
            # Convert to Python List
            return obj.tolist()
        else:
            # Let the base class Encoder handle the object
            return json.JSONEncoder.default(self, obj)


# Numpy array of floats
a = np.arange(1, 10, 0.5)
print(type(a), a)

# Pass our encoder to json.dumps()
b = json.dumps(a, cls=MyEncoder)
print(b)

Наконец, мы кодируем его, передавая имя класса параметру |/json.dumps()

Таким образом, вызов кодирования будет:

json_object = json.dumps(python_object, cls=MyEncoder)

Выход

Действительно, наш пользовательский кодер теперь может преобразовывать массивы numpy в объекты JSON! Сейчас мы завершили наш первый комплексный кодер.

Вы можете расширить эту функциональность, чтобы написать различные кодеры для вашего конкретного случая использования!

Сохраняем данные в JSON в Python

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

Также стоит упомянуть метод dumps — он отвечает за автоматическую упаковку информации в JSON и принимает переменную, содержащую все необходимые данные.

import json
dictData = { "ID"        310450,
             "login"     "admin",
             "name"      "James Bond",
             "password"  "root",
             "phone"     3330303,
             "email"     " ",
             "online"    True }
jsonData = json.dumps(dictData)
print(jsonData)

{"ID" 310450, "login" "admin", "name" "James Bond", "password" "root", "phone" 3330303, "email" " ", "online" true}

Выполнив метод dumps, мы получим результат, который передастся в переменную с названием jsonData. То есть мы видим, что словарь dictData преобразовался в формат JSON всего лишь одной строчкой. А за счёт функции print вся информация была закодирована в изначальном виде. Также следует добавить, что сведения из поля online преобразовались из литерала True в true.

Теперь, используя Python, выполним запись json в файл. Чтобы это сделать, дополним предыдущий код:

with open("data.json", "w") as file
    file.write(jsonData)

Performance

Serialization and deserialization performance of orjson is better than
ultrajson, rapidjson, simplejson, or json. The benchmarks are done on
fixtures of real data:

  • twitter.json, 631.5KiB, results of a search on Twitter for «一», containing
    CJK strings, dictionaries of strings and arrays of dictionaries, indented.

  • github.json, 55.8KiB, a GitHub activity feed, containing dictionaries of
    strings and arrays of dictionaries, not indented.

  • citm_catalog.json, 1.7MiB, concert data, containing nested dictionaries of
    strings and arrays of integers, indented.

  • canada.json, 2.2MiB, coordinates of the Canadian border in GeoJSON
    format, containing floats and arrays, indented.

Latency

twitter.json serialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 0.59 1698.8 1
ujson 2.14 464.3 3.64
rapidjson 2.39 418.5 4.06
simplejson 3.15 316.9 5.36
json 3.56 281.2 6.06

twitter.json deserialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 2.28 439.3 1
ujson 2.89 345.9 1.27
rapidjson 3.85 259.6 1.69
simplejson 3.66 272.1 1.61
json 4.05 246.7 1.78

github.json serialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 0.07 15265.2 1
ujson 0.22 4556.7 3.35
rapidjson 0.26 3808.9 4.02
simplejson 0.37 2690.4 5.68
json 0.35 2847.8 5.36

github.json deserialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 0.18 5610.1 1
ujson 0.28 3540.7 1.58
rapidjson 0.33 3031.5 1.85
simplejson 0.29 3385.6 1.65
json 0.29 3402.1 1.65

citm_catalog.json serialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 0.99 1008.5 1
ujson 3.69 270.7 3.72
rapidjson 3.55 281.4 3.58
simplejson 11.76 85.1 11.85
json 6.89 145.1 6.95

citm_catalog.json deserialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 4.53 220.5 1
ujson 5.67 176.5 1.25
rapidjson 7.51 133.3 1.66
simplejson 7.54 132.7 1.66
json 7.8 128.2 1.72

canada.json serialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 4.72 198.9 1
ujson 17.76 56.3 3.77
rapidjson 61.83 16.2 13.11
simplejson 80.6 12.4 17.09
json 52.38 18.8 11.11

canada.json deserialization

Library Median latency (milliseconds) Operations per second Relative (latency)
orjson 10.28 97.4 1
ujson 16.49 60.5 1.6
rapidjson 37.92 26.4 3.69
simplejson 37.7 26.5 3.67
json 37.87 27.6 3.68

Memory

orjson’s memory usage when deserializing is similar to or lower than
the standard library and other third-party libraries.

This measures, in the first column, RSS after importing a library and reading
the fixture, and in the second column, increases in RSS after repeatedly
calling on the fixture.

Library import, read() RSS (MiB) loads() increase in RSS (MiB)
orjson 13.5 2.5
ujson 14 4.1
rapidjson 14.7 6.5
simplejson 13.2 2.5
json 12.9 2.3

github.json

Library import, read() RSS (MiB) loads() increase in RSS (MiB)
orjson 13.1 0.3
ujson 13.5 0.3
rapidjson 14 0.7
simplejson 12.6 0.3
json 12.3 0.1

citm_catalog.json

Library import, read() RSS (MiB) loads() increase in RSS (MiB)
orjson 14.6 7.9
ujson 15.1 11.1
rapidjson 15.8 36
simplejson 14.3 27.4
json 14 27.2

canada.json

Library import, read() RSS (MiB) loads() increase in RSS (MiB)
orjson 17.1 15.7
ujson 17.6 17.4
rapidjson 18.3 17.9
simplejson 16.9 19.6
json 16.5 19.4

Reproducing

The above was measured using Python 3.8.3 on Linux (x86_64) with
orjson 3.3.0, ujson 3.0.0, python-rapidson 0.9.1, and simplejson 3.17.2.

The latency results can be reproduced using the and
scripts. The memory results can be reproduced using the script.

JSON Load

Этот метод осуществляет десериализацию из fp в Python-объект. Для этого использует приведенную выше таблицу конвертации. Аргументы этого метода следующие.

object_hook. Эта функция необязательна для использования. Она применяется к результату декодирования объекта. Здесь используется значение, возвращаемое функцией, а не словарь. 

object_pair_shook. Применяется к результату декодирования объекта с определенной последовательностью ключа и значения. Вместо исходного словаря будет использоваться тот результат, который выдала эта функция.

parse_float. Если он определяется, то вызывается для каждого JSON-значения типа float. 

parse_int. Аналог предыдущей функции, но используется с целочисленными значениями.

parse_constant. Может использоваться для вызова исключений, если обнаруживаются числа, которые являются в JSON недопустимыми. 

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

Python-dotenv — считываем конфигурацию приложения из переменных среды

Теперь перейдем к сторонним библиотекам, использующимся для управления конфигурацией приложений Python. До сих пор я намеренно пропустил еще один тип файлов конфигурации, а именно . Так значения настроек, находящихся в файле при запуске терминала (скрипта приложения) будут загружены как переменные среды, и поэтому с помощью библиотеки , а точнее ее метода можно получить доступ к ним из кода приложения.

Файл обычно выглядит следующим образом. По умолчанию его местонахождение – корневая папка вашего проекта.

ENVIRONMENT=test
DEBUG=true
USERNAME=xiaoxu
PASSWORD=xiaoxu
HOST=127.0.0.1
PORT=5432

Чтение

Этот тип файла конфигурации очень легко использовать. Так если вы решите переопределить существующую (или создать новую) переменную среды, то можете использовать вызов метод , например, зададим значение параметра .

import os
from dotenv import load_dotenv

load_dotenv()
print(os.getenv('DEBUG'))
# true

load_dotenv(override=True)
# переопределяем переменную среды

Валидация

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

# .env
ENVIRONMENT=test
DEBUG
# load.py
load_dotenv()
print('DEBUG' in os.environ.keys())
# False

All done!

Congratulations, you can now wield the mighty power of JSON for any and all of your nefarious Python needs.

While the examples you’ve worked with here are certainly contrived and overly simplistic, they illustrate a workflow you can apply to more general tasks:

  1. Import the package.
  2. Read the data with or .
  3. Process the data.
  4. Write the altered data with or .

What you do with your data once it’s been loaded into memory will depend on your use case. Generally, your goal will be gathering data from a source, extracting useful information, and passing that information along or keeping a record of it.

Today you took a journey: you captured and tamed some wild JSON, and you made it back in time for supper! As an added bonus, learning the package will make learning and a snap.

Good luck with all of your future Pythonic endeavors!

Способ 1: Использование json.load () для чтения файла json в python

JSON Module Это встроенный модуль в Python3, который предоставляет нам возможности обработки файлов JSON, используя Отказ

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

Предположить это файл JSON со следующим содержимым:

{
"name": "AskPython",
"type": "website",
"language": "Python"
}

Мы можем загрузить объекты JSON в объект Python, используя следующую программу. Теперь мы можем легко получить доступ к нему, используя {ключ: значение} Пары сопоставления словаря!

import json
 
with open("sample.json", "r") as rf:
    decoded_data = json.load(rf)
 
print(decoded_data)
# Check is the json object was loaded correctly
try:    
    print(decoded_data)
except KeyError:
    print("Oops! JSON Data not loaded correctly using json.loads()")

Выход

{'name': 'AskPython', 'type': 'website', 'language': 'Python'}
AskPython

Действительно, мы смогли правильно загружать наши объекты JSON из нашего файла!

Способ 2: Используйте IJSON для больших файлов JSON

Если ваш файл JSON достаточно велик, так что он дорого принести весь контент в память, лучший подход будет преобразовать содержимое файла в Потоки Использование Отказ

Поток представляет собой коллекцию объектов (так же, как объекты JSON), которые будут загружены на память Только по требованию Отказ Это означает, что наш погрузчик данных загружает данные «Lazy», то есть только при необходимости.

Это ослабляет требование памяти при работе с большими файлами. Содержание потока хранится во временном буфере, что позволяет справиться с гигабайтами файлов JSON!

Чтобы установить Используйте PIP!

pip install ijson

Теперь, чтобы поэкспериментировать, мы будем использовать несколько маленький файл JSON, так как он будет много времени для загрузки гигабайт данных!

Я буду использовать файл covid thumeries json, на это связь. Загрузите файл и переименуйте это как Отказ Размер файла должен составлять около 2 МБ.

import ijson

for prefix, type_of_object, value in ijson.parse(open("covid_timeseries.json")):
    print(prefix, type_of_object, value)

Образец вывода (несколько строк)

Yemen.item.date string 2020-4-13
Yemen.item map_key confirmed
Yemen.item.confirmed number 1
Yemen.item map_key deaths
Yemen.item.deaths number 0
Yemen.item map_key recovered
Yemen.item.recovered number 0
Yemen.item end_map None
Yemen.item start_map None
Yemen.item map_key date
Yemen.item.date string 2020-4-14
Yemen.item map_key confirmed
Yemen.item.confirmed number 1
Yemen.item map_key deaths
Yemen.item.deaths number 0
Yemen.item map_key recovered
Yemen.item.recovered number 0
Yemen.item end_map None
Yemen end_array None

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

В то время как Может быть медленным, кажется, работает в пределах меньшей памяти. Вы можете попробовать этот модуль, если вы работаете с большими файлами.

Итоги

Поздравляю, теперь вы обладаете могущественной силой JSON для любых ваших потребностей в Python.

Хотя примеры, с которыми вы работали, безусловно, оригинальные и чрезмерно упрощены, они демонстрируют рабочий процесс, который вы можете применить к более общим задачам:

  1. Импорт модуля json
  2. Чтение данных с load() или loads()
  3. Обработка данных
  4. Запись измененных данных при помощи dump() или dumps()

Что вы будете делать с данными, после того как они загрузились в память — зависит от вашего случая. В целом, ваша задача — собрать данные из источника, извлечение полезной информации, и передача этой информации (или ее запись).

Сегодня вы проделали небольшое путешествие: вы поймали и приручили JSON, и вернулись домой как раз к ужину! И в качестве бонуса, научившись работать с модулем json, можете начать изучение модулей pickle и marshal.

Спасибо за внимание, и удачи с вашими начинаниями в Python!

Добавить комментарий

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

Adblock
detector