Мне нужно знать, как добавить определенную строку из списка 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)
Вы уверены, что ['English', 'French'] в вашем файле заключен в двойные кавычки? Потому что это кажется неудобным, возможно, плохим выбором структуры JSON. Это также делает недействительным мое предложение выше.
Если я использую "у меня другая ошибка
Вот моя структура json {"language": "['English', 'French']", "bank": 50}
Лучше исправить входной файл в более подходящий формат JSON, чем возиться и делать странные вещи в коде.
Чтобы добавить в список Python, вы должны использовать метод append().
Пример:
import ast
ast.literal_eval(data["language"]).append("Spanish")
Это дает мне ошибку: AttributeError: объект 'str' не имеет атрибута 'append'
Смотрите мой второй комментарий к вопросу.
@BatteTarte, если это случай списка в двойных кавычках, вы могли бы: import ast ast.literal_eval(data["language"]).append("Spanish")
Это не работает @slqq, это просто завершает работу терминала, и ничего не происходит
Зачем вообще нужен literal_eval?
Хотя мы говорим о списке языков, которые кажутся достоверными данными. Я лично нахожу literal_eval удобным для использования в таком случае, пытаясь использовать то, что предлагает язык во встроенных модулях.
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}
Объяснение было бы в порядке. Например, что вы изменили? В чем идея/суть? Из Справочного центра : «...всегда объясняйте, почему решение, которое вы представляете, подходит и как оно работает». Пожалуйста, ответьте, отредактировав (изменив) свой ответ, а не здесь, в комментариях (**** без **** "Редактировать:", "Обновить:" или подобное - ответ должен выглядеть так, как если бы он был написан сегодня ).
{"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)
data["language"].append('Spanish')
, затем сохраните обратно в свой файл.