Формат JSON изначально использовался для описания объектов, которые существует в JavaScript. Сейчас он является отдельным текстовым форматом. В JSON описываются такие основные сущности как числа, строки, списки, объекты (словари, которые хранят в себе пару ключ-значение), также мы храним значения true/false и null, что является аналогом None в языке Python.
[ { "first_name": "Greg", "last_name": "Dean", "certificate": true, "scores": [ 70, 80, 90 ], "description": "Good job, Greg" }, { "first_name": "Wirt", "last_name": "Wood", "certificate": true, "scores": [ 70, 80, 90 ], "description": "Nicely Done" } ]
Каждой сущности в JSON есть аналог в Python. Ключом в JSON-объекте может быть только строка. Значения true и false пишутся с маленькой буквы. А значению None будет соответствовать значение null. Строки можно объявить только внутри двойных кавычек.
Для того чтобы считывать и записывать данные в JSON-формате в языке Python существует библиотека json.
Функция dumps принимает первым аргументом объект языка Python и возвращает соответствующее ему строковое представление в формате JSON. Также ей передается количество отступов, которое нужно использовать. И еще можно отсортировать ключи каждого словаря, который попадается в данном объекте.
Для записи в файл можно использовать функцию dump:
Чтобы получить объект языка Python соответствующий строковому представлению в формате JSON можно использовать функцию loads:
Чтобы считать данные из JSON-файла можно использовать функцию load:
Для того чтобы считывать и записывать данные в JSON-формате в языке Python существует библиотека json.
Функция dumps принимает первым аргументом объект языка Python и возвращает соответствующее ему строковое представление в формате JSON. Также ей передается количество отступов, которое нужно использовать. И еще можно отсортировать ключи каждого словаря, который попадается в данном объекте.
import json student1 = { 'first_name': 'Greg', 'last_name': 'Dean', 'scores': [70, 80, 90], 'description': "Good job, Greg", 'certificate': True } student2 = { 'first_name': 'Wirt', 'last_name': 'Wood', 'scores': [80, 80.2, 80], 'description': "Nicely Done", 'certificate': True } data = [student1, student2] data_json = json.dumps(data, indent=4, sort_keys=True)
Для записи в файл можно использовать функцию dump:
with open("students.json", "w") as f: json.dump(data, f, indent=4, sort_keys=True)
Чтобы получить объект языка Python соответствующий строковому представлению в формате JSON можно использовать функцию loads:
data = [student1, student2] data_json = json.dumps(data, indent=4, sort_keys=True) data_again = json.loads(data_json) print(sum(data_again[0]["scores"]))
Чтобы считать данные из JSON-файла можно использовать функцию load:
with open("students.json", "r") as f: data_again = json.load(f) print(sum(data_again[1]["scores"]))
Если файл students.json пустой, то
ОтветитьУдалитьwith open("students.json", "r") as f:
data_again = json.load(f)
выдаст ошибку, верно?
Да, совершенно верно:
УдалитьTraceback (most recent call last):
File "myexample.py", line 3, in
data_again = json.load(f)
File "/usr/lib/python3.5/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None