Как я могу добавить элемент в список из файла JSON в Python?

Мне нужно знать, как добавить определенную строку из списка JSON.

Вот содержимое моего файла JSON:

{"language": "['English', 'French']", "bank": 50}

Я хотел бы добавить строку «Испанский» в список языков.

Как мне это сделать?

import json

with open("example.json", "r") as jsonFile:
    data = json.load(jsonFile)

add list(data["language"]['Spanish'])

with open("example.json", "w") as jsonFile:
    json.dump(data, jsonFile)
data["language"].append('Spanish'), затем сохраните обратно в свой файл.
9769953 13.02.2023 15:46

Вы уверены, что ['English', 'French'] в вашем файле заключен в двойные кавычки? Потому что это кажется неудобным, возможно, плохим выбором структуры JSON. Это также делает недействительным мое предложение выше.

9769953 13.02.2023 15:49

Если я использую "у меня другая ошибка

BatteTarte 13.02.2023 15:55

Вот моя структура json {"language": "['English', 'French']", "bank": 50}

BatteTarte 13.02.2023 15:56

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

9769953 13.02.2023 17:54
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
1
5
90
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Чтобы добавить в список Python, вы должны использовать метод append().

Пример:

import ast
ast.literal_eval(data["language"]).append("Spanish")

Это дает мне ошибку: AttributeError: объект 'str' не имеет атрибута 'append'

BatteTarte 13.02.2023 15:51

Смотрите мой второй комментарий к вопросу.

9769953 13.02.2023 15:53

@BatteTarte, если это случай списка в двойных кавычках, вы могли бы: import ast ast.literal_eval(data["language"]).append("Spanish")

slqq 13.02.2023 16:00

Это не работает @slqq, это просто завершает работу терминала, и ничего не происходит

BatteTarte 13.02.2023 16:09
literal_eval: "Это специально разработано не для выполнения кода Python... Но оно не защищено от атак: относительно небольшой ввод может привести к исчерпанию памяти или исчерпанию стека C, что приведет к сбою процесса. Существует также возможность из-за чрезмерного потребления ЦП отказ в обслуживании на некоторых входах. Таким образом, вызов его для ненадежных данных не рекомендуется».
Peter Mortensen 18.02.2023 18:14

Зачем вообще нужен literal_eval?

Peter Mortensen 18.02.2023 18:16

Хотя мы говорим о списке языков, которые кажутся достоверными данными. Я лично нахожу literal_eval удобным для использования в таком случае, пытаясь использовать то, что предлагает язык во встроенных модулях.

slqq 18.02.2023 18:53
import json
import ast

with open("example.json", "r") as jsonFile:
    data = json.load(jsonFile)

#data = {"language": "['English', 'French']", "bank": 50}

#take a variable e

e=ast.literal_eval(data['language'])

e.append('Spanish')

data['language']=e

print(data)
#{'language': ['English', 'French', 'Spanish'], 'bank': 50}

Объяснение было бы в порядке. Например, что вы изменили? В чем идея/суть? Из Справочного центра : «...всегда объясняйте, почему решение, которое вы представляете, подходит и как оно работает». Пожалуйста, ответьте, отредактировав (изменив) свой ответ, а не здесь, в комментариях (**** без **** "Редактировать:", "Обновить:" или подобное - ответ должен выглядеть так, как если бы он был написан сегодня ).

Peter Mortensen 18.02.2023 18:44
Ответ принят как подходящий
{"language": "['English', 'French']", "bank": 50}

Здесь «языковые» ключи содержат строку, а не список из-за " перед [ и " после ]. Чтобы решить эту проблему, измените файл на этот:

{"language": ["English", "French"], "bank": 50}

Затем используйте этот код, чтобы добавить «испанский» или любой другой язык с этого момента:

import json

with open("temp.json", "r") as f:
    data = json.load(f)

data["language"].append("Spanish")

with open("temp.json", "w") as f:
    json.dump(data, f)

Другие вопросы по теме