Добавление строки вне JSON в Python json.dump - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь вывести строку вне объекта JSON, используя json.dump в python. Я могу успешно вывести JSON со следующим кодом:

events = [] 

item = {}
allEvents = []
for event in events:

#Do a bunch of stuff

 case = {'Artist': item['Artist'], 'Date': item['Date'], 'EventDate': item['eventDate'], 'Time': item['Time'], 'Venue': item['Venue'],
        'Address': item['Address'], 'Coordinates': coordinates, 'ArtistImage': item['artistImage'], 'Genre': item['genre'], 'OtherInfo': item['otherInfo'], 'ArtistBio': item['artistBio']}

        item[event] = case
        allEvents.append(case)

with open("events.json", "w") as writeJSON:
json.dump(item, writeJSON, sort_keys=True)

Мой вывод соответствует ожиданиям (в формате JSON):

[{"Address": "581 5th Street, Oakland, California 94607", "Artist": "Triangle Man", "ArtistBio": "No artist bio available", "ArtistImage": "https://assets.bandsintown.com/images/fallbackImage.png", "Coordinates": [-122.278385, 37.799161], "Date": "Wednesday, June 12th, 2019", "EventDate": "2019-06-12", "Genre": "No genre available", "OtherInfo": "No other event info available", "Time": "10:00 PM", "Venue": "Brix 581"}, {"Address":.........}]

Однако я хочу, чтобы вывод выглядел следующим образом: "var events= " как строка перед JSON.

enter image description here

Я пробовал:

eventsVariable = "var events = "
with open("events.json", "w") as writeJSON:
json.dump(eventsVariable, item, writeJSON, sort_keys=True)

Но выдает ошибку, когда я пытаюсь объединить строку со списком. Любые мысли о том, как сделать это с помощью json.dump или других методов приветствуются.

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Ваш первоначальный подход json.dump(eventsVariable, item, writeJSON, sort_keys=True) неверен, поскольку согласно json.dump docs , первый элемент должен быть допустимым объектом json, который "var events = " не является

. ВыЯ могу добавить вашу "var events = " строку к строке json, возвращенной json.dumps(), а затем сохранить эту строку в вашем файле.

Вы можете использовать string.format или f-strings в зависимости от вашей версии Python, у меня естьвключены оба примера ниже

#Use f-strings for python >= 3.6
#s = f'var events = {json.dumps(data)}'
s = 'var events = {}'.format(json.dumps(data))
with open("events.txt", "w") as fp:
    fp.write(s)
1 голос
/ 13 июня 2019

Вместо дампа прямо в файл с json.dump, используйте json.dumps, чтобы сначала сделать дамп в строку

with open("events.json", "w") as writeJSON:
    file_str = json.dumps(item, sort_keys=True)
    file_str = "var events = " + file_str
    writeJSON.write(file_str)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...