Запись данных словаря, содержащего значения перечисления, в файл JSON с использованием Python - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть перечисление, как показано ниже:

class University(Enum):
    STUDENT = 1
    PROFESSOR = 2

У меня есть словарь с именем «University_info», содержащий данные, как показано ниже:

[{<University.PROFESSOR: 2>: {'iD': 1234,
 'Name': 'John Samuel'
 'Phone': 7531670961,
 'City': 'Rochester'}},

 {<University.PROFESSOR: 2>: {'iD': 5678,
 'Name': 'Alisa Potter',
 'Phone': 8904124567,
 'City': 'Manhattan'}}]

Я хочу записать эти данные в файл JSON. Я использую следующий код:

import json
fileName='test.json'
def writeToJSONFile(data):
    with open(fileName, 'a+') as fp:
        json.dump(data, fp)

тогда я вызываю функцию в словаре как:

writeToJSONFile(university_info)

это дает мне ошибку:

key <University.PROFESSOR: 2> is not a string

но когда я делаю:

writeToJSONFile(str(university_info))

Это результат печати правильно

Могу ли я узнать, как можно распечатать результат в JSON, не преобразовав его в str?

1 Ответ

0 голосов
/ 06 сентября 2018

Обычный JSON может кодировать только следующее.

  • объект (Python dict)
  • массив (список Python)
  • строка (Python str)
  • число (Python или int)
  • "правда" (Python True)
  • "ложь" (Python False)
  • "ноль" (Python None)

Вот и все. Вы должны определить пользовательский кодер и декодер для других типов, которые обычно также включают кодирование его в виде простой структуры JSON. Например, Enum может быть [string, number]. Но реализация по умолчанию не включает это.

...