Working with json data in python
Содержание:
- 🔹 Введение: Что такое JSON?
- Encoders and Decoders¶
- Опции
- Использование метода json.dumps ()
- Convert from Python to JSON
- json.dumps() – Создание объекта JSON
- Convert dictionary to JSON using sort_keys Python
- Python to JSON (Encoding)
- Packaging
- Создайте свой собственный кодер JSON
- Сохраняем данные в JSON в Python
- Performance
- JSON Load
- Python-dotenv — считываем конфигурацию приложения из переменных среды
- All done!
- Способ 1: Использование json.load () для чтения файла json в 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:
- Import the package.
- Read the data with or .
- Process the data.
- 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.
Хотя примеры, с которыми вы работали, безусловно, оригинальные и чрезмерно упрощены, они демонстрируют рабочий процесс, который вы можете применить к более общим задачам:
- Импорт модуля json
- Чтение данных с load() или loads()
- Обработка данных
- Запись измененных данных при помощи dump() или dumps()
Что вы будете делать с данными, после того как они загрузились в память — зависит от вашего случая. В целом, ваша задача — собрать данные из источника, извлечение полезной информации, и передача этой информации (или ее запись).
Сегодня вы проделали небольшое путешествие: вы поймали и приручили JSON, и вернулись домой как раз к ужину! И в качестве бонуса, научившись работать с модулем json, можете начать изучение модулей pickle и marshal.
Спасибо за внимание, и удачи с вашими начинаниями в Python!