Как добавить данные в json python
Перейти к содержимому

Как добавить данные в json python

  • автор:

Добавление ключей в JSON объект динамически: решение в Python

Для динамического формирования JSON-объекта в Python можно использовать словарь dict . Заполните его данными, которые нужны вам, а затем преобразуйте в строку JSON:

Скопировать код

import json # Создаем JSONObject json_obj = # Понимаем, что забыли email – добавляем: json_obj['email'] = 'alice@example.com' # JSONObject готов! json_str = json.dumps(json_obj)

В результате у вас будет строка: . При необходимости, вы без проблем можете дополнять и изменять json_obj .

Распространенные ошибки

Чтобы стать профессионалом в работе с JSON, избегайте следующих ошибок:

  • Запомните, что json.dumps(<>) возвращает строку, а не словарь.
  • Для формирования структуры используйте словари Python и применяйте json.dumps() для преобразования их в JSON-строку.
  • Если вам необходимо работать с пользовательскими объектами, используйте object_hook в json.loads() для контроля над процессом декодирования.
  • Для упрощения взаимодействия с JSON обратите внимание на библиотеки ObjDict и EasyDict.

Визуализация

Создание динамического JSON-объекта можно сравнить с постройкой домика на дереве. Здесь ключи служат наименованиями комнат, а значениями — их содержимым:

добавление записи в json с помощью python

Понимаю, что вопрос простой, но не пойму как дописать в json. Есть json:

import json name = input("Имя: ") phone = input("Телефон: ") def create_json(): json_data = < "name": name, "phone": phone, >with open('db.json', 'w') as file: file.write(json.dumps(json_data, indent=2, ensure_ascii=False)) # create_json() def add_to_json(): json_data = < "name": name, "phone": phone, >data = json.load(open("db.json")) data.append(json_data) with open("db.json", "w") as file: json.dump(data, file, indent=2, ensure_ascii=False) add_to_json() 

Вылезает ошибка:

AttributeError: 'dict' object has no attribute 'append' 

Нужно добавить запись, что бы json имел такой вид:

Как добавить значение в файл json через python?

Мне кажется я в json что-то не так понял? Но у меня не получается добавить нового пользователя через питон. Каким кодом можно добавить этого нового пользователя если его нету в json?

  • Вопрос задан 08 мая 2023
  • 410 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 3
Новичок в разработке
Вот, но это АЗЫ для твой проги

from json import load, dump class Users: """Общий класс для работы с пользователями в формате JSON""" def __init__(self, filename='users.json'): self.filename = filename self.load() def load(self): """Загрузить файл с пользователями""" try: with open(self.filename) as fp: self.users = load(fp) except FileNotFoundError: self.users = <> def save(self): """Сохраняет файл с пользователями""" with open(self.filename, 'w') as fp: dump(self.users, fp) def add_user(self, name, lakes): """Добавляет пользователя""" user_id = str(len(self.users) + 1) self.users[user_id] = # Здесь можно добавить поля self.save() def remove_user(self, user_id): """Удаляет пользователя""" if user_id in self.users: del self.users[user_id] self.save() def get_users(self): """Получить пользователей""" return self.users def get_user(self, user_id): """Получить пользователя под номером. """ return self.users.get(user_id, None) # Иниц-я users = Users() print(users.users) # добавлять пользователя users.add_user("Poll", 124) # Сохранить файл users.save()

Ответ написан 08 мая 2023
Комментировать
Нравится 1 Комментировать

phaggi

Алан Гибизов @phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю

  • Загружаете JSON, получаете dict (словарь)
  • Вносите в словарь необходимые изменения, в вашем случае my_dict.update(>)
  • Сохраняете словарь в виде JSON.

Загружаете через json.load или json.loads , обратно преобразуете json.dump или json.dumps

Ответ написан 08 мая 2023
Нравится 1 1 комментарий

phaggi

Алан Гибизов @phaggi Куратор тега Python

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

import json class User: def __init__(self, f_name: str) -> None: self.f_name = f_name with open(self.f_name) as f: self.user_list = json.load(f) self.users = [i['name'] for i in self.user_list.values()] self.last_id = int(list(self.user_list.keys())[-1]) def add_users(self, name: str, lakes: int) -> None: if name not in self.users: self.users.append(name) self.last_id += 1 self.user_list[str(self.last_id)] = with open(self.f_name, 'w') as f: json.dump(self.user_list, f) else: print(f'Пользователь с именем уже существует') users = User('users.json') users.add_users('Derill', 23) users.add_users('David', 21)

Ответ написан 08 мая 2023
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +2 ещё

Почему код не выводит аттрибут title (selenium, python)?

  • 1 подписчик
  • 8 минут назад
  • 11 просмотров

Работа с файлами в формате JSON#

JSON (JavaScript Object Notation) — это текстовый формат для хранения и обмена данными.

JSON по синтаксису очень похож на Python и достаточно удобен для восприятия.

Как и в случае с CSV, в Python есть модуль, который позволяет легко записывать и читать данные в формате JSON.

Чтение#

 "access": [ "switchport mode access", "switchport access vlan", "switchport nonegotiate", "spanning-tree portfast", "spanning-tree bpduguard enable" ], "trunk": [ "switchport trunk encapsulation dot1q", "switchport mode trunk", "switchport trunk native vlan 999", "switchport trunk allowed vlan" ] > 

Для чтения в модуле json есть два метода:

  • json.load — метод считывает файл в формате JSON и возвращает объекты Python
  • json.loads — метод считывает строку в формате JSON и возвращает объекты Python

json.load #

Чтение файла в формате JSON в объект Python (файл json_read_load.py):

import json with open('sw_templates.json') as f: templates = json.load(f) print(templates) for section, commands in templates.items(): print(section) print('\n'.join(commands)) 

Вывод будет таким:

$ python json_read_load.py access switchport mode access switchport access vlan switchport nonegotiate spanning-tree portfast spanning-tree bpduguard enable trunk switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 999 switchport trunk allowed vlan

json.loads #

Считывание строки в формате JSON в объект Python (файл json_read_loads.py):

import json with open('sw_templates.json') as f: file_content = f.read() templates = json.loads(file_content) print(templates) for section, commands in templates.items(): print(section) print('\n'.join(commands)) 

Результат будет аналогичен предыдущему выводу.

Запись#

Запись файла в формате JSON также осуществляется достаточно легко.

Для записи информации в формате JSON в модуле json также два метода:

  • json.dump — метод записывает объект Python в файл в формате JSON
  • json.dumps — метод возвращает строку в формате JSON

json.dumps #

Преобразование объекта в строку в формате JSON (json_write_dumps.py):

import json trunk_template = [ 'switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan' ] access_template = [ 'switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable' ] to_json = 'trunk': trunk_template, 'access': access_template> with open('sw_templates.json', 'w') as f: f.write(json.dumps(to_json)) with open('sw_templates.json') as f: print(f.read()) 

Метод json.dumps подходит для ситуаций, когда надо вернуть строку в формате JSON. Например, чтобы передать ее API.

json.dump #

Запись объекта Python в файл в формате JSON (файл json_write_dump.py):

import json trunk_template = [ 'switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan' ] access_template = [ 'switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable' ] to_json = 'trunk': trunk_template, 'access': access_template> with open('sw_templates.json', 'w') as f: json.dump(to_json, f) with open('sw_templates.json') as f: print(f.read()) 

Когда нужно записать информацию в формате JSON в файл, лучше использовать метод dump.

Дополнительные параметры методов записи#

Методам dump и dumps можно передавать дополнительные параметры для управления форматом вывода.

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

К счастью, модуль json позволяет управлять подобными вещами.

Передав дополнительные параметры методу dump (или методу dumps), можно получить более удобный для чтения вывод (файл json_write_indent.py):

import json trunk_template = [ 'switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan' ] access_template = [ 'switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable' ] to_json = 'trunk': trunk_template, 'access': access_template> with open('sw_templates.json', 'w') as f: json.dump(to_json, f, sort_keys=True, indent=2) with open('sw_templates.json') as f: print(f.read()) 

Теперь содержимое файла sw_templates.json выглядит так:

 "access": [ "switchport mode access", "switchport access vlan", "switchport nonegotiate", "spanning-tree portfast", "spanning-tree bpduguard enable" ], "trunk": [ "switchport trunk encapsulation dot1q", "switchport mode trunk", "switchport trunk native vlan 999", "switchport trunk allowed vlan" ] > 

Изменение типа данных#

Еще один важный аспект преобразования данных в формат JSON: данные не всегда будут того же типа, что исходные данные в Python.

Например, кортежи при записи в JSON превращаются в списки:

In [1]: import json In [2]: trunk_template = ('switchport trunk encapsulation dot1q', . 'switchport mode trunk', . 'switchport trunk native vlan 999', . 'switchport trunk allowed vlan') In [3]: print(type(trunk_template)) In [4]: with open('trunk_template.json', 'w') as f: . json.dump(trunk_template, f, sort_keys=True, indent=2) . In [5]: cat trunk_template.json [ "switchport trunk encapsulation dot1q", "switchport mode trunk", "switchport trunk native vlan 999", "switchport trunk allowed vlan" ] In [6]: templates = json.load(open('trunk_template.json')) In [7]: type(templates) Out[7]: list In [8]: print(templates) ['switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan']

Так происходит из-за того, что в JSON используются другие типы данных и не для всех типов данных Python есть соответствия.

Таблица конвертации данных Python в JSON:

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

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