Как получить вывод JSON.loads() в словарном типе, но не в строковом типе, используя PYTHON
Когда я использую JSON.dump(), я получаю формат ниже JSON
Dumps data"b'{\"AutomaticReadabilityIndex\":2.7999999999999994,\"AgeLevel\":[\" 11 to 12\"],\"Statement\":[\"Nice. Your grade is about six\"],\"SpacheScore\":1.877,\"GunningFogScore\":9.099999999999998,\"SmogIndex\":5.999999999999999}'"
Когда я использую JSON.loads(), я получаю формат ниже JSON с байтами
loads data b'{"AutomaticReadabilityIndex":2.7999999999999994,"AgeLevel":[" 11 to 12"],"Statement":["Nice. Your grade is about six"],"SpacheScore":1.877,"GunningFogScore":9.099999999999998,"SmogIndex":5.999999999999999}'
Мой вопрос, когда я использую формат загрузки, вывод должен быть в словаре, но я не знаю, почему я получаю строковый тип в качестве выходных данных. Как преобразовать эту строку JSON в тип словаря.
Loads Data Type : type of loads <class 'str'>
Когда я пытаюсь разобрать строковый тип JSON напрямую, я получаю сообщение об ошибке ниже
ERROR : Traceback (most recent call last):
File "Db.py", line 84, in <module>
print(par['GunningFogScore'])
TypeError: string indices must be integers
1 ответ
Я могу воспроизвести вашу проблему просто с помощью:
import json
s = {"AutomaticReadabilityIndex":2.7999999999999994,"AgeLevel":[" 11 to 12"],"Statement":["Nice. Your grade is about six"],"SpacheScore":1.877,"GunningFogScore":9.099999999999998,"SmogIndex":5.999999999999999}
print(json.dumps(json.dumps(s)))
результат:
"{\"SmogIndex\": 5.999999999999999, \"AutomaticReadabilityIndex\": 2.7999999999999994, \"SpacheScore\": 1.877, \"GunningFogScore\": 9.099999999999998, \"AgeLevel\": [\" 11 to 12\"], \"Statement\": [\"Nice. Your grade is about six\"]}"
Так что либо:
- вы цепляете две свалки. Первый дамп преобразует словарь в строку, но дамп строки также допустим, поэтому строка сбрасывается, кавычки, экранируются и т. Д...
- вы сбрасываете строку, которая выглядит как словарь (
"{12:1,14:2}"
).
(Если вы не уверены в типе, проверьте type(s)
перед выполнением дампа)
Поэтому, когда вы перезагрузите с
par = json.loads(s)
вы получаете строку, а не словарь, который объясняет сообщение об ошибке при использовании []
(поскольку вы пытаетесь передать ключ в строку)
Временное решение:
использование json.loads(json.loads(s))
восстановить ваши данные.
и, как лучше исправить, просто используйте dumps
один раз в процессе сериализации.